Git Diff с Beyond Сравнить
Мне удалось заставить git запустить Beyond Compare 3 в качестве инструмента сравнения, однако, когда я делаю diff, сравниваемый файл не загружается. Загружается только последняя версия файла, и ничего больше, поэтому на правой панели Beyond Compare ничего нет.
Я запускаю git 1.6.3.1 с Cygwin с Beyond Compare 3. Я настроил вне всякого сравнения, как они предлагают в разделе поддержки на их веб-сайте, с помощью скрипта, подобного таковому:
#!/bin/sh
# diff is called by git with 7 parameters:
# path old-file old-hex old-mode new-file new-hex new-mode
"path_to_bc3_executable" "$2" "$5" | cat
Кто-нибудь еще сталкивался с этой проблемой и знает решение этой проблемы?
Редактировать:
Я последовал советам VonC, но у меня все та же проблема, что и раньше. Я немного новичок в Git, так что, возможно, я не правильно использую diff.
Например, я пытаюсь увидеть различие в файле с помощью команды, подобной такой:
git diff main.css
После этого откроется Beyond Compare, который покажет только мой текущий файл main.css на левой панели, на правой панели ничего нет. Я хотел бы увидеть мой текущий файл main.css в левой панели по сравнению с HEAD, в основном то, что я в последний раз совершал.
Мой git-diff-wrapper.sh выглядит так:
#!/bin/sh
# diff is called by git with 7 parameters:
# path old-file old-hex old-mode new-file new-hex new-mode
"c:/Program Files/Beyond Compare 3/BCompare.exe" "$2" "$5" | cat
Мой конфиг git выглядит так для Diff:
[diff]
external = c:/cygwin/bin/git-diff-wrapper.sh
21 ответ
Я не использую дополнительные файлы оболочки.sh. Моя среда - Windows XP, git 1.7.1 на cygwin и Beyond Compare 3. Ниже приведен мой файл .git/config.
[diff]
tool = bc3
[difftool]
prompt = false
[difftool "bc3"]
#use cygpath to transform cygwin path $LOCAL (something like /tmp/U5VvP1_abc) to windows path, because bc3 is a windows software
cmd = \"c:/program files/beyond compare 3/bcomp.exe\" "$(cygpath -w $LOCAL)" "$REMOTE"
[merge]
tool = bc3
[mergetool]
prompt = false
[mergetool "bc3"]
#trustExitCode = true
cmd = \"c:/program files/beyond compare 3/bcomp.exe\" "$LOCAL" "$REMOTE" "$BASE" "$MERGED"
Затем я использую $ git difftool для сравнения и $ git mergetool для слияния.
О trustExitCode: для настраиваемой команды слияния укажите, можно ли использовать код завершения команды слияния, чтобы определить, было ли слияние выполнено успешно. Если для этого параметра не установлено значение true, то проверяется временная метка целевого файла слияния, и слияние считается успешным, если файл был обновлен, в противном случае пользователю предлагается указать успешное слияние.
Спасибо @dahlbyk, автору Posh-Git, за то, что он опубликовал свой конфиг как суть. Это помогло мне решить мою проблему с конфигурацией.
[diff]
tool = bc3
[difftool]
prompt = false
[difftool "bc3"]
cmd = \"c:/program files (x86)/beyond compare 3/bcomp.exe\" \"$LOCAL\" \"$REMOTE\"
[merge]
tool = bc3
[mergetool]
prompt = false
keepBackup = false
[mergetool "bc3"]
cmd = \"c:/program files (x86)/beyond compare 3/bcomp.exe\" \"$LOCAL\" \"$REMOTE\" \"$BASE\" \"$MERGED\"
trustExitCode = true
[alias]
dt = difftool
mt = mergetool
Запустите эти команды для Beyond Compare 2:
git config --global diff.tool bc2
git config --global difftool.bc2.cmd "\"c:/program files (x86)/beyond compare 2/bc2.exe\" \"$LOCAL\" \"$REMOTE\""
git config --global difftool.prompt false
Запустите эти команды для Beyond Compare 3:
git config --global diff.tool bc3
git config --global difftool.bc3.cmd "\"c:/program files (x86)/beyond compare 3/bcomp.exe\" \"$LOCAL\" \"$REMOTE\""
git config --global difftool.prompt false
Тогда используйте git difftool
В более поздних версиях Git и Beyond Compare, чем у OP, у меня сработало следующее:
- Git для Windows - v.2.22.0
- Beyond Compare 4 - v.4.2.10 (64-битная версия)
Редактируемый файл конфигурации: %USERPROFILE%\. Gitconfig
Замените теги diff / difftool и merge / mergetool на
[diff]
tool = bc4
[difftool]
prompt = false
[difftool "bc4"]
cmd = \"c:/program files/beyond compare 4/bcomp.exe\" "$LOCAL" "$REMOTE"
[merge]
tool = bc4
[mergetool]
prompt = false
[mergetool "bc4"]
trustExitCode = true
cmd = \"c:/program files/beyond compare 4/bcomp.exe\" "$LOCAL" "$REMOTE" "$BASE" "$MERGED"
Чтобы использовать вне сравнения в MAC OSX, вам необходимо сделать следующее: Установить дополнительные инструменты командной строки из меню:
Затем вам нужно запустить эти команды:
git config --global diff.tool bc3
git config --global merge.tool bc3
git config --global mergetool.bc3.trustExitCode true
После этого вы могли бежать
git mergetool
в папке с конфликтом git и БК будет работать как положено
Вот мой конфигурационный файл. Потребовалось немного борьбы, но теперь это работает. Я использую сервер Windows, msysgit и не сравнивать 3 (по-видимому, версия x86). Вы заметите, что мне не нужно указывать какие-либо аргументы, и я использую "путь" вместо "cmd".
[user]
name = PeteW
email = petew@petew.com
[diff]
tool = bc3
[difftool]
prompt = false
[difftool "bc3"]
path = /c/Program Files (x86)/Beyond Compare 3/BComp.exe
[merge]
tool = bc3
[mergetool]
prompt = false
keepBackup = false
[mergetool "bc3"]
path = /c/Program Files (x86)/Beyond Compare 3/BComp.exe
trustExitCode = true
[alias]
dt = difftool
mt = mergetool
Если вы работаете в Windows 7 (профессиональный) и Git для Windows (v 2.15 или выше), вы можете просто запустить команду ниже, чтобы узнать, какие разные инструменты сравнения поддерживаются вашим Git для Windows
git difftool --tool-help
Вы увидите вывод, похожий на этот
git difftool --tool='может быть установлен в одно из следующих:
vimdiff vimdiff2 vimdiff3
это означает, что ваш мерзавец не поддерживает (не может найти) вне всякого сравнения с difftool прямо сейчас.
Для того, чтобы Git мог найти вне сравнения как допустимый difftool, у вас должен быть каталог установки Beyond Compare в переменной окружения системного пути. Вы можете проверить это, запустив bcompare из оболочки (cmd, git bash или powershell. Я использую Git Bash). Если Beyond Compare не запускается, добавьте его установочный каталог (в моем случае C:\Program Files\Beyond Compare 4) в переменную системного пути. После этого перезапустите вашу оболочку. Git покажет Beyond Compare как возможную опцию difftool. Вы можете использовать любую из приведенных ниже команд для запуска вне сравнения как difftool (например, для сравнения любого локального файла с какой-либо другой веткой)
git difftool -t bc branchnametocomparewith -- path-to-file
or
git difftool --tool=bc branchnametocomparewith -- path-to-file
Вы можете настроить вне сравнения в качестве difftool по умолчанию, используя следующие команды
git config --global diff.tool bc
ps имейте в виду, что bc в приведенной выше команде может быть bc3 или bc, основываясь на том, что Git смог найти из вашей системной переменной path.
Похоже, что BC3 поддерживает только 3 способа слияния для PRO Edition. http://www.scootersoftware.com/moreinfo.php?zz=kb_editions
Обновление для BC4 64bit: это работает для Git для Windows v.2.16.2 и Beyond Compare 4 - v.4.2.4 (64bit Edition)
Я вручную отредактировал файл.gitconfig, расположенный в корне моего пользователя "C:\Users\MyUserName", и заменил теги diff/difftool и merge/mergetool на
[diff]
tool = bc
[difftool "bc"]
path = 'C:/Program Files/Beyond Compare 4/BComp.exe'
[difftool "bc"]
cmd = \"C:/Program Files/Beyond Compare 4/BComp.exe\" \"$LOCAL\" \"$REMOTE\"
[difftool]
prompt = false
[merge]
tool = bc
[mergetool "bc"]
path = 'C:/Program Files/Beyond Compare 4/BComp.exe'
[mergetool "bc"]
cmd = \"C:/Program Files/Beyond Compare 4/BComp.exe\" \"$REMOTE\" \"$LOCAL\" \"$BASE\" \"$MERGED\"
Страница поддержки Beyond Compare немного краткая.
Проверьте мой diff.external ответ для большего (относительно точного синтаксиса)
Выдержка:
$ git config --global diff.external <path_to_wrapper_script>
в командной строке, заменяя путь к "
git-diff-wrapper.sh
", Так что ваши~/.gitconfig
содержит
-->8-(snip)--
[diff]
external = <path_to_wrapper_script>
--8<-(snap)--
Обязательно используйте правильный синтаксис, чтобы указать пути к сценарию-оболочке и инструменту сравнения, т. Е. Использовать прямую косую черту вместо обратной косой черты. В моем случае у меня есть
[diff]
external = c:/Documents and Settings/sschuber/git-diff-wrapper.sh
в
.gitconfig
а также
"d:/Program Files/Beyond Compare 3/BCompare.exe" "$2" "$5" | cat
в сценарии оболочки.
Примечание: вы также можете использовать git difftool
,
Обратите внимание, что вы сделали неправильный путь в 2 доллара. потому что вы находитесь под Cygwin, но BC3 нет, поэтому вы должны указать полный путь к нему. такой как "d:/cygwin$2"
Пожалуйста, обратитесь к моему git-diff-wrapper.sh здесь:
$ cat ~/git-diff-wrapper.sh
#!/bin/sh
echo $2
echo $5
/cygdrive/c/Program\ Files\ \(x86\)/Beyond\ Compare\ 3/BCompare.exe "d:/programs/cygwin$2" "$5"
Удачи.
Работал у меня для Windows 10
Запустите в терминале git,
git config --global diff.tool bc3
git config --global difftool.bc3.path "c:/program files/beyond compare 4/bcomp.exe"
git config --global merge.tool bc3
git config --global mergetool.bc3.path "c:/program files/beyond compare 4/bcomp.exe"
Windows 10, Git v2.13.2
Мой.gitconfig. Не забудьте добавить escape-символ для '\' и '"'.
[diff]
tool = bc4
[difftool]
prompt = false
[difftool "bc4"]
cmd = \"C:\\Program Files\\Beyond Compare 4\\BCompare.exe\" \"$LOCAL\" \"$REMOTE\"
[merge]
tool = bc4
[mergetool "bc4"]
path = C:\\Program Files\\Beyond Compare 4\\BCompare.exe
Вы можете сослаться на настройки вне сравнения в difftool для использования команд git для его настройки.
Запустите эти команды для Beyond Compare 3(если путь BCompare.exe отличается в вашей системе, пожалуйста, замените его в соответствии с вашим):
git config --global diff.tool bc3
git config --global difftool.bc3.cmd "\"c:/program files (x86)/beyond compare 3/BCompare.exe\" \"$LOCAL\" \"$REMOTE\""
git config --global difftool.prompt false
Тогда используйте git difftool
http://rubenlaguna.com/wp/2010/08/05/visual-difftool-cygwin-git/ есть решение, которое я выбрал для работы в BeyondCompare: http://gist.github.com/564573
Разница заключается в том, что exe-файл вызывается: установите его для вызова bcomp.exe, и он будет работать нормально. Сконфигурируйте свою среду так, чтобы она вызывала bcompare.exe, и в итоге вы получите пустую часть сравнения, взятую из вашей ревизионной системы.
Для git версии 2.15.1.windows.2 с BC2.exe.
Конфигурация ниже, наконец, работает на моей машине.
[difftool "bc2"]
cmd = \"c:/program files/beyond compare 2/bc2.exe\" ${LOCAL} ${REMOTE}
Для MAC после долгих исследований это сработало для меня..! 1. Установите запредельное сравнение, и оно будет установлено в расположении ниже
/Applications/Beyond\ Compare.app/Contents/MacOS/bcomp
Пожалуйста, выполните следующие действия, чтобы сделать bc инструментом diff/merge в git http://www.scootersoftware.com/support.php?zz=kb_mac
Если вы не хотите возиться с конфигурационными файлами, вы можете просто использовать difftool --extcmd.
Поэтому, когда я сравниваю на своем компьютере, я просто вставляю это в свой терминал VSCode:
git difftool --dir-diff --no-symlinks --extcmd "C:\Program Files\Beyond Compare 4\bcomp.exe" HEAD..master
Конфигурация не требуется.
По какой-то причине, для меня, файл tmp, созданный git diff, был удален, прежде чем он был открыт для сравнения. Сначала мне пришлось скопировать его в другое место.
cp -r $2 "/cygdrive/c/temp$2"
cygstart /cygdrive/c/Program\ Files\ \(x86\)/Beyond\ Compare\ 3/BCompare.exe "C:/temp$2" "$5"