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

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

Я запускаю git 1.6.3.1 с Cygwin с Beyond Compare 3. Я установил вне сравнения, поскольку они предлагают в части поддержки своего веб-сайта script, например:

#!/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 правильно.

Например, я пытаюсь увидеть diff в файле с такой командой:
  git diff main.css

После сравнения откроется и отобразится текущий текущий 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

My git config выглядит так: Diff:

[diff]  
external = c:/cygwin/bin/git-diff-wrapper.sh

Ответ 1

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

Ответ 2

Благодаря @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

Ответ 3

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

Ответ 5

Вот мой файл конфигурации. Это заняло определенную борьбу, но теперь оно работает. Я использую сервер windows, msysgit и не сравниваю 3 (по-видимому, версию x86). Вы заметите, что мне не нужно указывать какие-либо аргументы, и я использую "путь" вместо "cmd".

[user]
        name = PeteW
        email = [email protected]
[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

Ответ 6

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

Отметьте diff.external answer больше (относительно точного синтаксиса)

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)--

Обязательно используйте правильный синтаксис, чтобы указать пути к обертке script и инструменту diff, т.е. использовать переднее сокращение вместо обратных косых черт. В моем случае у меня есть

[diff]
    external = c:/Documents and Settings/sschuber/git-diff-wrapper.sh

в .gitconfig и

"d:/Program Files/Beyond Compare 3/BCompare.exe" "$2" "$5" | cat

в обертке script.


Примечание. Вы также можете использовать git difftool.

Ответ 8

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

Удачи.

Ответ 10

Разница заключается в вызове exe: установите его для вызова bcomp.exe, и он будет работать нормально. Настройте среду для вызова bcompare.exe, и в итоге вы столкнетесь со стороной сравнения, полученной из пустой системы проверки.

Ответ 11

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

Ответ 12

Обновление для 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\"

Ответ 13

Если вы работаете в 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.

Ответ 14

По какой-то причине для меня файл 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"

Ответ 15

Для MAC после много исследований он работал у меня..! 1. Установите значение, отличное от сравнения, и оно будет установлено ниже.

/Applications/Beyond\Compare.app/Contents/MacOS/bcomp

Пожалуйста, выполните следующие действия, чтобы сделать bc как инструмент diff/merge в git http://www.scootersoftware.com/support.php?zz=kb_mac

Ответ 16

Для git версии 2.15.1.windows.2 с BC2.exe.

Конфигурация ниже, наконец, работает на моей машине.

[difftool "bc2"] cmd = \"c:/program files/beyond compare 2/bc2.exe\" ${LOCAL} ${REMOTE}

Ответ 17

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 для его настройки.