Мне нравится работать с 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 . |