Git diffftool --dir-diff не создает временные файлы для Beyond Compare 3 для использования
Я пытаюсь использовать git новую (из git 1.7.11) команду diff diff с Beyond Compare 3 как diffftool, но временные файлы не создаются.
Например:
git difftool --dir-diff <branch1> <branch2>
Beyond Compare открывает сравнение каталогов с правильными каталогами и измененными файлами.
Однако, когда я нажимаю на любой из файлов, я получаю следующую ошибку:
Unable to load C:\Users\<username>\AppData\Local\Temp\git-difftool.yG8V5\left\<path to some file>: The system cannot find the path specified
Итак, я проверяю, существует ли каталог C:\Users\<username>\AppData\Local\Temp\git-difftool.yG8V5
, и это не так.
Beyond Compare 3 отлично работает, так как diffftool для некаталогического разграничения и слияния.
Я использую git для Windows (msysgit) 1.8.0.
Вот соответствующие настройки .gitconfig:
# External Visual Diff/Merge Tool
[diff]
tool = bc3
[difftool "bc3"]
path = "C:/Program Files (x86)/Beyond Compare 3/BComp.exe"
[merge]
tool = bc3
[mergetool "bc3"]
keepTemporaries = false
trustExitCode = true
keepBackup = false
path = "C:/Program Files (x86)/Beyond Compare 3/BComp.exe"
Ответы
Ответ 1
Здесь описано решение здесь. В принципе, если вы измените свой .gitconfig, чтобы использовать BCompare.exe
вместо BComp.exe
, сеанс консоли останется открытым до тех пор, пока окно Beyond Compare не будет закрыто.
Измените настройки .gitconfig следующим образом:
# External Visual Diff/Merge Tool
[diff]
tool = bc3
[difftool "bc3"]
path = "C:/Program Files (x86)/Beyond Compare 3/BCompare.exe"
Ответ 2
Ответ от Скотта Вегнера имеет небольшой недостаток - если вы попытаетесь запустить 2 сравнения одновременно, второй не будет работать. Это связано с тем, что BCompare.exe не запускает второй экземпляр приложения, поэтому запустил процесс слишком рано.
К сожалению, BCompare.exe не понимает параметр командной строки /solo
, поэтому я пишу небольшой файл bat в каталоге установки Beyond Compare 3:
C:\Program Files (x86)\Beyond Compare 3\BCompD.bat
start /wait "" "%~dp0/bcomp.exe" %* /solo
и использовать его как инструмент
[difftool "bc3dir"]
path = C:/Program Files (x86)/Beyond Compare 3/bcompd.bat
cmd = \"C:/Program Files (x86)/Beyond Compare 3/bcompd.bat\" \"$LOCAL\" \"$REMOTE\"
Я не использую это как diff diff tol, поэтому я называю его bc3dir
и использую как следующий:
git difftool --dir-diff --tool=bc3dir 760be6d47d35b42a6a2409636b40a5521361e72f^ 760be6d47d35b42a6a2409636b40a5521361e72f
Ответ 3
Обратите внимание, что у вас есть другой случай, когда git difftool --dir-diff
может ошибочно работать.
"git difftool --dir-diff
" имел незначительную регрессию при запуске с
подкаталог, который был исправлен с помощью Git 2.12 (Q1 2017).
См. commit 853e10c (07 декабря 2016 г.) Дэвид Агилар (davvid
).
(слияние Junio C Hamano - gitster
- в совершить afe0e2a, 19 декабря 2016 года)
difftool
: исправить dir-diff
создание индекса, когда в подкаталоге
9ec26e7 (difftool
: исправление обработки аргументов в поддирелях, 2016-07-18, Git 2.9.3) исправлено, как аргументы пути обрабатываются в подкаталоге, но он ввел регрессию в отношении того, как элементы, находящиеся за пределами подкаталога, обрабатываются dir-diff
.
При подготовке правой части diff мы включаем только измененные пути во временной области.
Левая часть diff построена из временного индекса, который построен из одного и того же набора измененных файлов, но он строится из подкаталога.
Это проблема, потому что индексированные пути являются относительными по уровню и поэтому они не добавлялись к индексу.
Учите difftool
до chdir
до верхнего уровня репозитория до подготовка временных указателей.
Это гарантирует, что все относительные пути верхнего уровня действительны.