Настройка diff с помощью .gitconfig - PullRequest
135 голосов
/ 20 июня 2011

Как настроить Git на использование другого инструмента для сравнения с файлом .gitconfig?

У меня есть это в моем .gitconfig:

[diff]
    tool = git-chdiff #also tried /bin/git-chdiff

не работает; он просто открывает обычную командную строку diff. Когда я делаю

export GIT_EXTERNAL_DIFF=git-chdiff

затем git diff откроет внешний инструмент сравнения (так что я знаю, что скрипт внешнего инструмента сравнения работает нормально). У меня что-то не так с моей конфигурацией .gitconfig для инструмента сравнения?

Ответы [ 8 ]

153 голосов
/ 21 ноября 2013

Дополнительный способ сделать это (из командной строки):

git config --global diff.tool tkdiff
git config --global merge.tool tkdiff
git config --global --add difftool.prompt false

Первые две строки установят difftool и mergetool на tkdiff - измените это в соответствии с вашими предпочтениями.Третья строка отключает надоедливую подсказку, поэтому всякий раз, когда вы нажимаете git difftool, он автоматически запускает difftool.

123 голосов
/ 20 июня 2011

Git предлагает ряд предварительно настроенных difftools «из коробки» (kdiff3, kompare, tkdiff, meld, xxdiff, emerge, vimdiff, gvimdiff, ecmerge, diffuse, opendiff, p4merge и araxis) также позволяет указать свой собственный. Чтобы использовать один из предварительно настроенных difftools (например, «vimdiff»), вы добавляете следующие строки в ваш ~/.gitconfig:

[diff]
    tool = vimdiff

Теперь вы сможете запускать "git difftool" и использовать свой инструмент по выбору.

Определение собственного difftool, с другой стороны, требует немного больше работы, см. Как просмотреть вывод 'git diff' с помощью моего предпочтительного инструмента сравнения / средства просмотра?

57 голосов
/ 04 февраля 2015

Другие ответили на этот вопрос на 99%, но остался один шаг.(Мой ответ будет поступать из OS X, поэтому вам придется соответствующим образом изменить пути к файлам.)

Вы вносите эти изменения в ~/.gitconfig:

[diff]
    tool = diffmerge
[difftool "diffmerge"]
    cmd = /Applications/Diffmerge.app/Contents/MacOS/diffmerge $LOCAL $REMOTE

Это исправит разницуинструмент.Вы также можете исправить это, не редактируя ~/.gitconfig напрямую, введя следующие команды из терминала:

git config --global diff.tool diffmerge
git config --global difftool.diffmerge.cmd "/Applications/DiffMerge.appContents/MacOS/diffmerge \$LOCAL \$REMOTE"

1%, о котором все остальные не упомянули, это то, что при использовании этого вы не можете просто запустить git diff myfile.txt;вам нужно запустить git difftool myfile.txt.

33 голосов
/ 20 июня 2011

Вот часть моего ~ / .gitconfig, где я настраиваю инструменты сравнения и слияния.Мне нравится diffmerge от SourceGear.(На самом деле мне это очень нравится).

[merge]
        tool = diffmerge
[mergetool "diffmerge"]
        cmd = "diffmerge --merge --result=\"$MERGED\" \"$LOCAL\" \"$(if test -f \"$BASE\"; then echo \"$BASE\"; else echo \"$LOCAL\"; fi)\" \"$REMOTE\""
        trustExitCode = false
[diff]
        tool = diffmerge
[difftool "diffmerge"]
        cmd = diffmerge \"$LOCAL\" \"$REMOTE\"

Итак, вы видите, вы определяете инструмент с именем diffmerge в строке [difftool "diffmerge"].Затем я устанавливаю инструмент "diffmerge" в качестве значения по умолчанию в разделе [diff] tool =.

У меня, очевидно, здесь есть команда "diffmerge" в моем пути.В противном случае мне нужно было бы указать полный путь к исполняемому файлу.

16 голосов
/ 31 августа 2017

Воспроизведение моего ответа из этой ветки , которая более специфична для настройки, чем сравнение в качестве инструмента сравнения для Git.Все детали, которыми я поделился, одинаково полезны для любого инструмента сравнения в общем, поэтому делитесь им здесь:

Первая команда, которую мы запускаем, выглядит следующим образом:

git config --global diff.tool bc3

Вышеприведенная командасоздает нижеприведенную запись в .gitconfig, найденную в каталоге %userprofile%:

[diff]
    tool = bc3

Затем вы запускаете команду ниже ( Выполнение этой команды избыточно в данном конкретном случае и требуется только в некоторых специализированных случаях.Вскоре вы узнаете это ):

git config --global difftool.bc3.path "c:/program files/beyond compare 3/bcomp.exe"

Приведенная выше команда создает следующую запись в файле .gitconfig:

[difftool "bc3"]
    path = c:/program files/Beyond Compare 3/bcomp.exe

Здесь нужно знать ключbc3.Это хорошо известный ключ для git, соответствующий определенной версии известных инструментов сравнения, доступных на рынке (bc3 соответствует 3-й версии инструмента Beyond Compare).Если вы хотите увидеть все предопределенные ключи, просто введите команду git difftool --tool-help в git bash.Возвращается список ниже:

vimdiff
vimdiff2
vimdiff3
araxis
bc
bc3
codecompare
deltawalker
diffmerge
diffuse
ecmerge
emerge
examdiff
gvimdiff
gvimdiff2
gvimdiff3
kdiff3
kompare
meld
opendiff
p4merge
tkdiff
winmerge
xxdiff

Вы можете использовать любую из вышеперечисленных клавиш или определить свой собственный ключ.Если вы хотите полностью настроить новый инструмент (или недавно выпущенную версию известного инструмента), который не соответствует ни одному из перечисленных выше ключей, вы можете сопоставить его с любым из перечисленных выше ключей или с новый ваш собственный ключ.

Что делать, если вам нужно настроить инструмент сравнения, который

  • Абсолютно новый на рынке

ИЛИ

  • Выпущена новая версия существующего хорошо известного инструмента, который не сопоставлен ни с какими предопределенными ключами в git ?

Как и в моем случае, я установил вне сравнения 4. вне сравнения это хорошо известный инструмент для git, но его версия 4 по умолчанию не сопоставлена ​​ни с одним из существующих ключей.Таким образом, вы можете использовать любой из следующих подходов:

  1. Я могу сопоставить инструмент сравнения 4 с уже существующим ключом bc3, который соответствует версии вне сравнения 3.У меня не было превосходной версии 3 на моем компьютере, поэтому мне было все равно.Если бы я хотел, я мог бы сопоставить его с любой из предопределенных клавиш в списке выше, например, examdiff.

    Если вы сопоставите хорошо известную версию инструментов с соответствующим уже существующим / хорошо известным ключом, вам не нужно будет запускать вторую команду, так как их путь установки уже известен git .

    Например, если бы я установил на моем компьютере не сравниваемую версию 3, то для начала работы было бы достаточно иметь следующую конфигурацию в моем файле .gitconfig:

    [diff]
    tool = bc3
    

    Но если вы хотитеизмените связанный с ним инструмент по умолчанию, и в итоге вы упомянете атрибут path отдельно, чтобы git узнал путь, откуда должен быть запущен исполняемый файл вашего нового инструмента.Вот запись, которую лисицы должны запускать после сравнения 4.Обратите внимание на путь к исполняемому файлу:

    [difftool "bc3"]
    path = c:/program files/Beyond Compare 4/bcomp.exe
    
  2. Самый чистый подход - полностью определить новый ключ для нового инструмента сравнения или новой версии известного инструмента,Как и в моем случае, я определил новый ключ bc4, чтобы его было легко запомнить.В таком случае вам нужно выполнить всего две команды, но ваша вторая команда не будет устанавливать путь к исполняемому файлу вашего нового инструмента.Вместо этого вы должны установить атрибут cmd для вашего нового инструмента, как показано ниже:

    git config --global diff.tool bc4
    
    git config --global difftool.bc4.cmd "\"C:\\Program Files\\Beyond Compare 4\\bcomp.exe\" -s \"\$LOCAL\" -d \"\$REMOTE\""
    

    При выполнении вышеуказанных команд создаются следующие записи в вашем файле .gitconfig:

    [diff]
    tool = bc4
    [difftool "bc4"]
    cmd = \"C:\\Program Files\\Beyond Compare 4\\bcomp.exe\" -s \"$LOCAL\" -d \"$REMOTE\"
    

Я настоятельно рекомендую вам следовать подходу №2, чтобы избежать путаницы в будущем.

14 голосов
/ 23 января 2015

Добавление одного из блоков ниже позволяет мне использовать KDiff3 для моей среды разработки Windows и Linux.Это делает для хорошего последовательного межплатформенного инструмента сравнения и слияния.

Linux

[difftool "kdiff3"]
    path = /usr/bin/kdiff3
    trustExitCode = false
[difftool]
    prompt = false
[diff]
    tool = kdiff3
[mergetool "kdiff3"]
    path = /usr/bin/kdiff3
    trustExitCode = false
[mergetool]
    keepBackup = false
[merge]
    tool = kdiff3

Windows

[difftool "kdiff3"]
    path = C:/Progra~1/KDiff3/kdiff3.exe
    trustExitCode = false
[difftool]
    prompt = false
[diff]
    tool = kdiff3
[mergetool "kdiff3"]
    path = C:/Progra~1/KDiff3/kdiff3.exe
    trustExitCode = false
[mergetool]
    keepBackup = false
[merge]
    tool = kdiff3
3 голосов
/ 19 октября 2018

Если вы хотите использовать несколько инструментов сравнения, добавьте псевдоним в .gitconfig

[alias]
    kdiff = difftool --tool kdiff3
0 голосов
/ 01 марта 2019

См. Microsoft vscode-tips-and-tricks .Просто запустите эти команды в своем терминале:

git config --global merge.tool code

Но сначала вам нужно добавить команду code в ваш PATH.enter image description here

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...