Мне нравится работать с 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 meldThe 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 xxdiffSome of the tools listed above only work in a windowedenvironment. 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 meldsparsick@sparsick-ThinkPad-T430s > git mergetoolNo 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 branch1Auto-merging testCONFLICT (content): Merge conflict in testAutomatic merge failed; fix conflicts and then commit the result. |
Теперь мы хотим разрешить эти конфликты с помощью графического инструмента (в примере это слияние). git mergetool в командной строке откройте графический инструмент по нашему выбору.
|
1
2
3
4
5
6
7
8
|
sparsick@sparsick-ThinkPad-T430s > git mergetoolMerging:testNormal 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 statusOn branch masterAll conflicts fixed but you are still merging.(use "git commit" to conclude merge)Changes to be committed:modified: testUntracked files:(use "git add <file>..." to include in what will be committed)test.origsparsick@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 statusOn branch masterUntracked files:(use "git add ..." to include in what will be committed)test.BACKUP.7344test.BASE.7344test.LOCAL.7344test.REMOTE.7344 |
Если только эти файлы в настоящее время не отслеживаются, тогда может помочь git clean . В противном случае они должны быть удалены вручную.
|
1
2
3
4
5
6
|
sparsick@sparsick-ThinkPad-T430s > git clean -fRemoving test.BACKUP.7344Removing test.BASE.7344Removing test.LOCAL.7344Removing test.REMOTE.734 |
| Ссылка: | Pimp My Git — Git Mergetool от нашего партнера по JCG Сандры Парсик в блоге SKM IT WORLD . |