Plainmerge это простая и быстрая утилита для Subversion (Windows),
позволяющая вам авторитарно сливать ветки в проектах с очень большим числом файлов.
Ее удобно применять, если в вашем проекте есть 2 основные ветки:
trunk: ветка для ведения разработки.
RELEASE: ветка, которая работает на продакшен-версии проекта. При выполнении
полного релиза в эту ветку копируется все содержимое trunk. Если же нужно
"прокинуть" критический багфикс, он переносится в RELEASE в индивидуальном порядке.
Если вы довольны стандартным механизмом слияния Subversion, значит, вам не нужна
никакая утилита. Если же вы в своем проекте (как я) сидите и ждете по 10 минут, пока
закончится merge, то plainmerge для вас.
Как использовать plainmerge
Для частичного (или полного) "проброса" изменений из trunk в RELEASE
воспользуйтесь следующей командой:
plainmerge.bat proto://server_url/trunk proto://server_url/branches/RELEASE
// или в общем виде (причем репозитории даже могут различаться):
plainmerge.bat url_источника url_места_назначения
Первый запуск утилиты займет много времени, т.к. plainmerge выполняет начальную
инициализацию и сохраняет результат во временную директорию. Выпейте чаю.
Зато последующие запуски (даже через месяц) будут уже быстрыми.
Дождитесь окончания операции. Откроется программа визуального сравнения двух
веток. При использовании Araxis Merge вы попадете в 3-панельный
режим сравнения (см. рис. ниже): в нем нужно "перекинуть" изменения из правой панели (trunk)
в среднюю (RELEASE), используя левую (ORIG-RELEASE) просто в качестве эталонной
подсказки, если понадобится отменить изменение.
Т.к. Araxis Merge платный, то в дистрибутив plainmerge он не входит. Зато
в него входит WinMerge, в котором есть только 2-панельный режим сравнения (справа
будет по-прежнему trunk, а слева RELEASE).
Щелкнув на тот или иной файл, можно просмотреть изменения в нем, а также
скопировать часть из них (или все) в ветку RELEASE:
Как только вы закончите слияние, закройте программу. Через несколько секунд
plainmerge сформирует финальный diff-файл со всеми изменениями, которые попадут
в ветку RELEASE. Проверьте их визуально: все ли правильно. Чтобы продолжить,
закройте программу.
И, наконец, на последнем шаге plainmerge предложет вам либо зафиксировать
(commit) изменения в ветке RELEASE, либо повторить слияние заново (с того места,
где вы закончили в прошлый раз), либо же завершить программу.
Зачем эта утилита?
Мое личное мнение таково: тема веток и слияний больная как для CVS, так и для
Subversion. Причем несмотря на то, что разработчики Subversion делают определенные
шаги для упрощения слияний, медлительность GUI-клиентов сводит на нет все их устилия.
Главная цель, которая преследовалась при создании утилиты plainmerge,
сделать инструмент, который:
не "тормозит" при повторных запусках;
не требует явного извлечения рабочей копии (т.е. выполняет как бы "слияние на сервере");
позволяет выбирать изменения в визуальном режиме;
"прозрачно" отслеживает операции добавления и удаления файлов.
К сожалению, у скорости есть своя цена: plainmerge не учитывает историю коммитов,
поэтому, пробрасывая изменения из ветки в ветку, вы не можете посмотреть, кто их сделал.
Решайте сами: можете ли вы пожертвовать этим в своем проекте или нет. (Мы можем.)
Кстати говоря, описанных проблем просто не существует, если использовать
Git. В частности, Git позволяет "единично
пробрасывать" коммиты из ветки в ветку без потери информации об их авторе,
и делает это быстро. Мой искренний совет вам: если есть возможность, переходите на
Git.
Программы визуального слияния
В настоящий момент plainmerge поддерживает работу с программами
WinMerge (бесплатная, входит в
дистрибутив plainmerge) и Araxis Merge
(платная, зато поддерживает 3-way comparision, крайне удобный в слияниях).
По умолчанию запускается WinMerge. Чтобы подключить Araxis, просто
скопируйте его файлы (обычно расположенные в C:/Program Files/Araxis Merge)
в папку bin/araxis.
Готовя релиз plainmerge, я просмотрел 8 различных GUI-программ для выполнения
визуального слияния (как платных, так и свободных). Araxis Merge оказался
самым удобным, хотя он и платный. Очень рекомендую попробовать. На втором
месте бесплатный WinMerge.
Состав дистрибутива
В состав plainmerge входят "кусочки" следующих программ:
Дополнительно можно подключить Araxis Merge,
расположив его в директории bin/araxis.
Резюме
Plainmerge весьма специфическая утилита. Она намеренно нарушает "книжные"
каноны выполнения слияний в Subversion, которые подчас оказываются очень сложными и
медлительными в больших проектах. Взамен дается быстрый инструмент
для удобной "прокидки" изменений в другую ветку. В качестве расплаты при
слиянии не учитываются авторы коммитов, а сравниваются, фактически,
две статические версии одного проекта. Поэтому тот, кто выполняет слияние,
должен неплохо ориентироваться в коде проекта и быть в контакте со всеми
разработчиками.
Решайте сами, пользоваться утилитой, переходить на Git
(Mercuria, Bazaar и т. д.) или же продолжать наслаждаться стандартным merge в Subversion.