Git Diff с Beyond Сравнить - PullRequest
       16

Git Diff с Beyond Сравнить

101 голосов
/ 15 января 2010

Мне удалось заставить git запустить Beyond Compare 3 как инструмент сравнения, однако, когда я делаю сравнение, сравниваемый файл не загружается. Загружается только последняя версия файла и ничего больше, поэтому в правой части 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

Кто-нибудь еще сталкивался с этой проблемой и знает решение этой проблемы?

Edit:
Я последовал советам 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

Ответы [ 17 ]

133 голосов
/ 03 августа 2010

Я не использую дополнительные файлы оболочки .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, то проверяется временная метка целевого файла слияния, и слияние считается успешным, если файл был обновлен, в противном случае пользователю предлагается указать успешное слияние.

27 голосов
/ 02 марта 2012

Спасибо @ dahlbyk , автору Posh-Git , за публикацию его config в виде гист . Это помогло мне решить проблему с конфигурацией.

[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
19 голосов
/ 07 июня 2011

Запустите эти команды для 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

9 голосов
/ 16 мая 2012
6 голосов
/ 10 октября 2012

Вот мой конфигурационный файл.Потребовалось немного борьбы, но теперь это работает.Я использую сервер 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
4 голосов
/ 15 января 2010

Страница поддержки Beyond Compare немного краткая.

Проверьте мой diff.external ответ для получения дополнительной информации (относительно точного синтаксиса)

Extract:

$ 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.

4 голосов
/ 19 ноября 2013

похоже, что BC3 поддерживает только 3 способа слияния для PRO Edition. http://www.scootersoftware.com/moreinfo.php?zz=kb_editions

3 голосов
/ 06 апреля 2010

Пожалуйста, обратите внимание, что вы сделали неправильный путь в 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"

Удачи.

2 голосов
/ 26 марта 2018

Обновление для BC4 64bit: Это работает для Git для Windows v.2.16.2 и Beyond Compare 4 - v.4.2.4 (64-разрядная версия)

Я вручную отредактировал файл .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\"
1 голос
/ 03 мая 2018

Если вы работаете в Windows 7 (профессиональный) и Git для Windows (v 2.15 или выше), вы можете просто запустить команду ниже, чтобы узнать, какие разные инструменты сравнения поддерживаются вашим Git для Windows

git difftool --tool-help

Вы увидите вывод, похожий на этот

git difftool --tool = 'может иметь одно из следующих значений:
vimdiff vimdiff2 vimdiff3

это означает, что ваш git не поддерживает (не может найти) за пределами сравнения с difftool прямо сейчас.

Для того, чтобы Git мог найти вне сравнения в качестве действительного difftool, в вашей системе должен быть Каталог установки Beyond Compare в вашей системной переменной path . Вы можете проверить это, запустив 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

p.s. помните, что bc в приведенной выше команде может быть bc3 или bc в зависимости от того, что Git смог найти из вашей системной переменной path.

...