Подтвердить что ты не робот

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"
4b9b3361

Ответ 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 до верхнего уровня репозитория до подготовка временных указателей.
Это гарантирует, что все относительные пути верхнего уровня действительны.