Git Diff с Beyond Compare


111

Мне удалось заставить 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

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

Изменить:
я следил за предложениями 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

Ответы:


140

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


12
Я работаю в Windows 7 с оболочкой mingw git. Мне пришлось использовать путь в стиле Linux /c/program filesвместо c:/program files. Также я удалил "$(cygpath -w $LOCAL)"и просто использовал "$LOCAL". Похоже, это помогло.
Лэндон Поч,

5
Как @pClass упоминает ниже, «bc3» теперь является внутренним инструментом в новых версиях git. Вы должны использовать уникальное имя, например, «yondcompare3 »
Скотт Вегнер,

4
Оболочка GitHub (в Windows 8) сообщила мне bcompare: command not found- пока я не изменил ИМЯ инструмента с bc3другого (например abc3). Я предполагаю, что помешала какая-то внутренняя настройка Github. Также я удалил "$(cygpath -w $LOCAL)"деталь и заменил ее на "$LOCAL". Теперь все работает нормально. Спасибо!
Felix Alcala

1
Это было для меня ошибкой, когда я смотрел на разницу между двумя коммитами. Вот лучшее решение: blog.kifaru.be/2011/07/…
balajimc55

2
Я также нашел эту статью: scootersoftware.com/support.php?zz=kb_vcs
Гай Авраам

28

Спасибо @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

Я попробовал этот ответ и не смог определить разницу, возможно, я делаю это неправильно.
Epu

1
@Epu, вы подтвердили, что ваши пути совпадают на вашем компьютере? И это Beyond Compare 3, а не более старая v2 или что-то в этом роде?
Ник Йосевски,

Я подтвердил, что пути совпадают, и это bc3.
Epu

1
Забавно, но «git difftool file.txt» и «git mergetool file.txt» работают нормально, поэтому я переключился на них. Но теперь git diff file.txt заблокирован (до того, как он показывал мне консольный diff по умолчанию). Теперь он выдает ошибку: не удается создать bc3: нет такого файла или каталога \ nexternal diff умер, остановка на file.txt '
Epu

На всякий случай, если кто-то столкнется с той же проблемой, что и я (неопознанный .gitconfig после его редактирования), мне пришлось добавить путь следующим образом:cmd = 'C:\\Program Files\\Beyond Compare 4\\BCompare.exe' \"$LOCAL\" \"$REMOTE\"
sebagomez

20

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


1
Поддерживается ли Beyond Compare 4?
Danijel

2
@Danijel, официальный документ, указанный в ответе @Daniel Magnussons, гласитNote: Use bc3 on the command line for both BC version 3 and 4
BNT,


6

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

Страница поддержки 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.



3

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

Удачи.


3
Вы действительно должны использовать для этого cygpath; напр bcompare.exe $(cygpath -w $2). Приветствия.
Дэн Молдинг

3

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

git difftool --tool-help

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

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

это означает, что ваш git прямо сейчас не поддерживает (не может найти) вне всякого сравнения как 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

Вы можете настроить не только для сравнения, но и по умолчанию, используя команды ниже.

   git config --global diff.tool bc

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


2

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


1

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


1

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


1

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


Привет, у меня был похожий сценарий, и он не удался, пока я не переключился на C: \ Program Files \ Beyond Compare 4 \ BComp.exe. С помощью BCompare.exe временный файл был удален до того, как его можно было сравнить, поэтому я видел только последний файл, а не зарегистрированную версию.
Габриэль

0

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

0

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

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

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


0

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

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

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

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.