Налаштування різного інструменту за допомогою .gitconfig


159

Як налаштувати Git використовувати інший інструмент для розходження з файлом .gitconfig?

Я маю це у своїй .gitconfig:

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

Це не працює; він просто відкриває звичайний командний рядок diff. Коли я це роблю

export GIT_EXTERNAL_DIFF=git-chdiff

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


1
Дивіться stackoverflow.com/questions/255202/… (можливо, закрийте це як дублікат)
Stein G. Strindhaug

Відповіді:


140

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

[diff]
    tool = vimdiff

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

Визначення власного difftool, з іншого боку, потребує трохи більше роботи, див. Як я бачу вихід "git diff" за допомогою мого вподобаного інструменту / переглядача diff?


Перша ланка розірвана. Здається, домен змінився з .comна .org. Я можу переглядати jeetworks.org/software
RBT

1
Що ви маєте на увазі під заздалегідь налаштованим "нестандартним" дифузолом? Щоб налаштувати зовнішній інструмент "winMerge", якого немає у вашому списку, мені довелося зробити те саме налаштування, яке ви згадали у своєму дописі, і все почало працювати без додаткової конфігурації. Так це означає, що git підтримує "winMerge" також поза коробкою, тому що, наскільки я можу зрозуміти з вашої публікації, що для налаштування різного інструменту, який не підтримується з-за нею, потрібні додаткові роботи / налаштування / конфігурація. коробка від git.
RBT

169

Додатковий спосіб зробити це (з командного рядка):

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

Перші два рядки встановлять Diftool і Mergetool на tkdiff- змінити це відповідно до ваших уподобань. Третій рядок вимикає набридливий підказку, тому щоразу, коли ви натискаєте git difftoolйого, автоматично запускається difftool.


11
Я це зробив, git config --global diff.tool diffmergeале коли я git diff myfile.txtце зробив, він все ще дав мені
різницю

Можливо, у вас локальна конфігурація, яка визначає інший інструмент різниці?
Омер Даган

1
можливо, вам потрібно передати правильні параметри для розмежування: це посилання пояснює, як це зробити для meld: link: nathanhoad.net/how-to-meld-for-git-diffs-in-ubuntu-hardy
rptr

5
@amphibient: спробуйте використовувати git diff tool myfile.txt, щоб використовувати цей інструмент.
JBRWilkinson

72

Інші відповіли на це 99%, але залишився один крок. (Моя відповідь надходить з ОС X, тому вам доведеться відповідно змінити контури файлів.)

Ви вносите ці зміни до свого ~/.gitconfig:

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

Це дозволить виправити інструмент "diff". Ви також можете це виправити, не редагуючи ~/.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.


23
За останній 1%. Немає нічого такого задовільного, як повністю забитий цвях;)
Titou

1
Чи є спосіб зробити його інструментом за замовчуванням?
math0ne

6
Чудово git config --global --add difftool.prompt false, хоч крок вам не вистачає . ;)
Сума

36

Ось частина мого ~ / .gitconfig, де я конфігурую інструменти diff та злиття. Мені подобається 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 --merge --result="$MERGED" "$LOCAL" "$(if test -f "$BASE"; then echo "$BASE"; else echo "$LOCAL"; fi)" "$REMOTE"
Тім Ловелл-Сміт

1
Я йду з тим простішимdiffmerge --merge --result="$MERGED" "$LOCAL" "$BASE" "$REMOTE"
Тім Ловелл-Сміт

І у нього є зручний сценарій 'sgdm_cygwin.sh', щоб зробити Cygwin простою у використанні версією Windows.
thoni56

Тож ви можете просто зробити, ln-s <pathtodiffmerge>/sgdm_cygwin.sh /usr/local/bin/diffmergeі все готово використовувати конфігурацію, описану вище. А також diffmergeбезпосередньо з командного рядка cygwin із шляхами cygwin.
thoni56

Це було б sgdm.exeсьогодні
kzu

22

Повторюючи свою відповідь з цієї теми, яка була більш специфічною для встановлення поза порівнянням як інструмент різниці для 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-й версії інструменту «Більше порівняння»). Якщо ви хочете побачити всі попередньо визначені клавіші, просто запустіть 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 дізнався шлях, з якого має бути запущена програма exe нового інструмента. Ось запис, який лисиці запускають за межі порівняння 4. Зверніть увагу на шлях exe:

    [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, щоб уникнути плутанини для себе в майбутньому.


16

Додавання одного з блоків нижче працює для мене, щоб використовувати 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

Ви знайшли спосіб створити єдиний крос-платформенний файл .gitconfig, який умовно визначає правильні шляхи як для Linux, так і для Windows?
Джеррі Ашер

1
Чесно кажучи, я переключився скрізь, і це, здається, працює.
moodboom

Чи є причина встановити trustExitCode = false? З мого розуміння, якщо встановлено значення false, git ігнорує ненульовий код виходу з вашого інструменту. Тож якщо ваш інструмент розчавити git помилково подумає би злиття вдало. Але, можливо, є причина для встановлення неправдивої інформації, поясніть, будь ласка.
аполлон

Я вважаю trustExitCode = false, що Git запитає вас, чи було злиття успішним, а не покладатися на те, чи трапився інструмент для виходу з істинним або хибним статусом.
moodboom

4

Якщо ви хочете мати можливість використовувати кілька різних інструментів, додайте псевдонім до .gitconfig

[alias]
    kdiff = difftool --tool kdiff3

для згадування --toolваріанту. Спасибі
itMaxence


0

У Windows нам потрібно запустити $git difftool --tool-helpкоманду, щоб побачити різні параметри, такі як:

    'git difftool --tool=<tool>' may be set to one of the following:
                    vimdiff
                    vimdiff2
                    vimdiff3

    The following tools are valid, but not currently available:
                    araxis
                    bc
                    bc3
                    codecompare
                    deltawalker
                    diffmerge
                    diffuse
                    ecmerge
                    emerge
                    examdiff
                    gvimdiff
                    gvimdiff2
                    gvimdiff3
                    kdiff3
                    kompare
                    meld
                    opendiff
                    p4merge
                    tkdiff
                    winmerge
                    xxdiff
Some of the tools listed above only work in a windowed
environment. If run in a terminal-only session, they will fail.

і ми можемо додати будь-яку з них (наприклад, winmerge), як

$  git difftool --tool=winmerge

Для налаштування блокнота ++ для перегляду файлів перед початком виконання:

 git config --global core.editor "'C:/Program Files/Notepad++/notepad++.exe' -multiInst -notabbar -nosession -noPlugin"

а за допомогою $ git commitвідкриється інформація про фіксацію в блокноті ++

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.