Сегодня рассмотрим установку и настройку для работы с Git утилиты P4Merge.
Скачиваем утилитку тут (линк может поменяться, так что если что гуглите)
Утилита доступна для ОС Windows, Mac OS X и Linux
Ну и начинаем установку
Проверяем установку. В смысле что P4Merge доступен через системную переменную PATH.
Жмем Win+R и даем команду P4Merge
Получаем
Если 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 это выглядит так
Я сделал четыре коммита файла test.txt в репозиторий Git. Приведу их лог, чтобы было более понятно и запустим сравнение файла test.txt из первого (c258082) и четвертого (ffd6b37) коммита.
Дадим команду
$ git difftool c258082 ffd6b37 --tool=p4m --cc test.txt
Git спрашивает запустить ли утилиту, которую мы определили как p4m, жмем Y и получаем
И соответственно видим слева содержимое файла test.txt из первого коммита и справа из четвертого.
Закрываем окошко. И теперь поменяем местами (слева на право) просматриваемые коммиты.
$ git difftool ffd6b37 c258082 --tool=p4m --cc test.txt
Теперь отображение файлов поменялось местами
То есть P4Merge корректно отображает расположение и содержимое сравниваемого файла в зависимости от заданной в команде очередности расположения коммитов.
Теперь посмотрим то же самое обычным git diff. Дадим команду
$ git diff ffd6b37 c258082 --cc test.txt
То же не плохо, но в графическом интерфейсе куда наглядней и приятней.
Теперь я сделал ветку newbranch, изменил в ней файл и сделал коммит, затем вернулся в ветку master, тоже изменил файлик и тоже сделал коммит. Дерево коммитов теперь выглядит так:
Теперь сделаем слияние при помощи P4Merge. Даем команду git merge из ветки master.
Git видит конфликт и предлагает нам его разрешить самим при помощи внешней утилиты. При этом надо понимать и учитывать, что команда git merge уже изменила файл test.txt, так как попыталась сперва сама его смерджить (объеденить). Сейчас файл test.txt выглядит так:
Теперь запустим вешнюю утилиту для разрешения конфликта слияния, как нам советовал Git
После соглашения на запуск p4m, мы видим экран P4Merge
При этом в рабочем каталоге P4Merge немного “намусорила”, создав временные файлы необходимые для слияния, но об этом можно не беспокоится. Она за собой приберется.
Жмем Save и выходим из программы, согласившись с тем как она решила слить (хотя могли бы и все поменять как самим надо). Посмотрим status
Файлик test.txt.origin – это diff файл сгенерированный командой git merge, его можно просто удалить и сделать коммит.
Теперь наше дерево коммитов выглядит так
Вот мы и разрешили конфликт слияния при помощи P4Merge