среда, 25 февраля 2015 г.

Инструменты для работы с Git – P4Merge

С Git можно использовать множество внешних инструментов с графическим интерфейсом, начиная от оболочек полностью переводящих работу с Git в графический интерфейс и заканчивая утилитами для сравнения и слияния.

Сегодня рассмотрим установку и настройку для работы с Git утилиты P4Merge.
Скачиваем утилитку тут (линк может поменяться, так что если что гуглите)

Утилита доступна для ОС Windows, Mac OS X и Linux

P4Merge00001

Ну и начинаем установку

P4Merge00002

P4Merge00004

Проверяем установку. В смысле что P4Merge доступен через системную переменную PATH.
Жмем Win+R и даем команду P4Merge

P4Merge00005

Получаем

P4Merge00006

Если P4Merge запустилась таким образом значит все хорошо.

Теперь настраиваем Git на использование P4Merge как внешней утилиты сравнения и слияния.
К слову сказать, в Git можно настроить несколько внешних утилит сравнения и слияния. И использовать любую из них на выбор.

Я решил сделать настройку через правку файла локального конфига репозитория Git. Для этого добавил в конфиг эти строчки:

[diff]
        tool = p4m

[difftool "p4m"]
        cmd = "p4merge.exe $LOCAL $REMOTE"

[merge]
        tool = p4m

[mergetool "p4m"]
        cmd = "p4merge.exe $BASE $LOCAL $REMOTE $MERGED"
        trustExitCode = true
        keepBackup = false
        keepTemporaries = false
В редакторе Far это выглядит так

P4Merge00007

Я сделал четыре коммита файла test.txt в репозиторий Git. Приведу их лог, чтобы было более понятно и запустим сравнение файла test.txt из первого (c258082) и четвертого (ffd6b37) коммита.

Дадим команду

$ git difftool c258082 ffd6b37 --tool=p4m --cc test.txt

P4Merge00008

Git спрашивает запустить ли утилиту, которую мы определили как p4m, жмем Y и получаем

P4Merge00009

И соответственно видим слева содержимое файла test.txt из первого коммита и справа из четвертого.

Закрываем окошко. И теперь поменяем местами (слева на право) просматриваемые коммиты.

$ git difftool ffd6b37 c258082 --tool=p4m --cc test.txt

P4Merge00010

Теперь отображение файлов поменялось местами

P4Merge00011

То есть P4Merge корректно отображает расположение и содержимое сравниваемого файла в зависимости от заданной в команде очередности расположения коммитов.

Теперь посмотрим то же самое обычным git diff. Дадим команду

$ git diff ffd6b37 c258082 --cc test.txt

P4Merge00012

То же не плохо, но в графическом интерфейсе куда наглядней и приятней.

Теперь я сделал ветку newbranch, изменил в ней файл и сделал коммит, затем вернулся в ветку master, тоже изменил файлик и тоже сделал коммит. Дерево коммитов теперь выглядит так:

P4Merge00013

Теперь сделаем слияние при помощи P4Merge. Даем команду git merge из ветки master.

P4Merge00015

Git видит конфликт и предлагает нам его разрешить самим при помощи внешней утилиты. При этом надо понимать и учитывать, что команда git merge уже изменила файл test.txt, так как попыталась сперва сама его смерджить (объеденить). Сейчас файл test.txt выглядит так:

P4Merge00014

Теперь запустим вешнюю утилиту для разрешения конфликта слияния, как нам советовал Git

P4Merge00016

После соглашения на запуск p4m, мы видим экран P4Merge

P4Merge00017

P4Merge00018При этом в рабочем каталоге P4Merge немного “намусорила”, создав временные файлы необходимые для слияния, но об этом можно не беспокоится. Она за собой приберется.





Жмем Save и выходим из программы, согласившись с тем как она решила слить (хотя могли бы и все поменять как самим надо). Посмотрим status

P4Merge00019

P4Merge00020Файлик test.txt.origin – это diff файл сгенерированный командой git merge, его можно просто удалить и сделать коммит.



P4Merge00021

Теперь наше дерево коммитов выглядит так

P4Merge00022

Вот мы и разрешили конфликт слияния при помощи P4Merge

Комментариев нет:

Отправить комментарий