Статьи

Pimp My Git — Git Mergetool

Мне нравится работать с git в командной строке. Но в некоторых случаях я предпочитаю поддержку пользовательского интерфейса. Например, решение конфликтов слияния является таким случаем. Git имеет команду mergetool , которая может открыть графический инструмент для решения конфликтов слияния. Но прежде чем вы сможете использовать эту команду, вы должны были настроить ее. В этом посте я хотел бы показать вам, как настроить mergetool и как его использовать.

конфигурация

Прежде всего, откройте оболочку в Linux. В Windows откройте Git Bash. Затем выберите графический инструмент, который должен помочь вам в разрешении конфликтов слияния. git mergetool –tool-help показывает список инструментов, которые поддерживаются на вашем компьютере

01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
 sparsick@sparsick-ThinkPad-T430s > git mergetool --tool-help
'git mergetool --tool=<tool>' may be set to one of the following:
                araxis
                kdiff3
                meld
 
The following tools are valid, but not currently available:
                bc
                bc3
                codecompare
                deltawalker
                diffmerge
                diffuse
                ecmerge
                emerge
                gvimdiff
                gvimdiff2
                gvimdiff3
                opendiff
                p4merge
                tkdiff
                tortoisemerge
                vimdiff
                vimdiff2
                vimdiff3
                winmerge
                xxdiff
 
Some of the tools listed above only work in a windowed
environment. If run in a terminal-only session, they will fail.

Эта команда показывает два списка. Первый список показывает все инструменты, которые поддерживаются git и которые доступны на вашем компьютере (в примере это araxis , kdiff3 и meld ). Второй список показывает, что также поддерживается git, но они не установлены на вашем компьютере.

Я использую смесь в качестве графического инструмента. Он работает на Windows и Linux. Если вы не установили meld на своей машине, то сейчас самое время сделать это или выбрать другой инструмент.

Мы хотим установить mergetool глобально для всех наших репозиториев.

1
2
3
sparsick@sparsick-ThinkPad-T430s > git config --global merge.tool meld
sparsick@sparsick-ThinkPad-T430s > git mergetool
No files need merging

Если git mergetool возвращает больше, чем файлы, которые не нужно объединять, то путь к графическому инструменту не указывается в системной переменной $ PATH (обычный случай в системах Windows). Можно указать путь к графическому инструменту непосредственно в git.

1
sparsick@sparsick-ThinkPad-T430s > git config --global mergetool.meld.path /c/Program\ Files\ \(x86\)/Meld/Meld.exe</pre>

Помните о двух важных вещах: mergetool пишется без точки между слиянием и инструментом, а meld является заполнителем для имени графического инструмента в приведенном выше примере. Если вы используете другой инструмент, такой как vimdiff , то ключ конфигурации называется mergetool.vimdiff.path.

Теперь git mergetool готов к использованию.

использование

Теперь я хотел бы продемонстрировать, как использовать git mergetool. Он используется, когда у нас возникают конфликты слияния во время действия слияния. Допустим, мы хотим объединить ветку branch1 в master, и у этого объединения будут некоторые конфликты слияния.

1
2
3
4
5
sparsick@sparsick-ThinkPad-T430s > git merge branch1
 
Auto-merging test
CONFLICT (content): Merge conflict in test
Automatic merge failed; fix conflicts and then commit the result.

Теперь мы хотим разрешить эти конфликты с помощью графического инструмента (в примере это слияние). git mergetool в командной строке откройте графический инструмент по нашему выбору.

1
2
3
4
5
6
7
8
sparsick@sparsick-ThinkPad-T430s > git mergetool
 
Merging:
test
 
Normal merge conflict for 'test':
{local}: modified file
{remote}: modified file

После разрешения конфликтов слияния изменение должно быть зафиксировано.

01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
sparsick@sparsick-ThinkPad-T430s > git status
 
On branch master
All conflicts fixed but you are still merging.
(use "git commit" to conclude merge)
 
Changes to be committed:
 
modified:   test
 
Untracked files:
(use "git add <file>..." to include in what will be committed)
 
test.orig
sparsick@sparsick-ThinkPad-T430s > git commit

Вы можете видеть, что у нас есть новый неотслеживаемый файл test.orig. Это резервная копия объединенного файла, созданного с помощью mergetool. Вы можете настроить удаление этой резервной копии после успешного слияния.

1
sparsick@sparsick-ThinkPad-T430s > git config --global mergetool.keepBackup false

Другие файлы создаются при использовании git mergetool :

01
02
03
04
05
06
07
08
09
10
sparsick@sparsick-ThinkPad-T430s > git status
 
On branch master
Untracked files:
(use "git add ..." to include in what will be committed)
 
test.BACKUP.7344
test.BASE.7344
test.LOCAL.7344
test.REMOTE.7344

Если только эти файлы в настоящее время не отслеживаются, тогда может помочь git clean . В противном случае они должны быть удалены вручную.

1
2
3
4
5
6
sparsick@sparsick-ThinkPad-T430s > git clean -f
 
Removing test.BACKUP.7344
Removing test.BASE.7344
Removing test.LOCAL.7344
Removing test.REMOTE.734
Ссылка: Pimp My Git — Git Mergetool от нашего партнера по JCG Сандры Парсик в блоге SKM IT WORLD .