[SVN]: merge trunk into tag/branch

На работе, в проекте основным репозиторием является svn. Каждая версия выпускаемого продукта, т. е. выливаемая на продакшн сервера, отмечается тэгом в svn, вида <название_проекта_сокращенное>-версия, например PHP, тогда наша метка будет иметь вид PHP-1.0.21.

Бывают ситуации когда, вылились и через некоторое время надо срочно подлить что-то на продакшн, какое-то исправление бага или что-то еще, конечно это неправильно, но куда деваться. Естественно, что за тот период, пока был обнаружен баг, было некоторое кол-во коммитов и возможно логика работы в некоторых местах поменялась, дополнилась функционалом, который не был еще оттестирован отделом QA, в общем который выливать нельзя. А баг поправить надо, и это собственно и сделали одним из коммитов, внеся изменения в старый функционал. Чтобы безболезненно вылить это на продакшн и добавить в метку можно сделать следующее:

Начальные условия:

  • слить транк проекта с последними изменениями, в консоли набрать svn up
  • знать ревизию коммита, в котором были сделаны правки (для простоты восприятия пусть у нас это будет 100)

Если все это сделали, то можно приступать (можно все сделать на сливая на локаль проект, но на мой взгляд так проще и безопаснее).

  1. Сливаем на локаль версию тэга,
svn co http://path/to/project/tags/Tag /path/on/local/  

Пример: svn co https://company.svn.com/php/tags/PHP-1.0.21/ /apps/php_tag/

  1. Переходим в папку, куда слили тэг cd /apps/php_tag/
    Набираем svn merge -c 100 https://company.svn.com/php/trunk/ Вот собственно и все, svn смерджил только тот коммит, которым поправили баг, осталось только проверить внесенные изменения, запустив svn diff, а затем запустить тесты для проверки работоспособности кода и проекта с данными изменениями (но это оставляю на совесть тех кто будет мерджить) После всех этих действий коммитим: svn ci -m «Подливка на продакшн» <тут можно указать конкретные файлы>, а можно конкретные файлы и не указывать и он закоммитит только те изменения, которые были внесены Теперь на проекте спокойно можно обновляться из метки и быть уверенным, что баг исправлен и обновим мы только эти исправления, а не новый функционал

P.S. вот здесь достаточно хорошо написано как мерджить trunk с branch'ем. А вообще используйте книгу, она хоть и достаточно древняя, но основные вещи там описаны достаточно хорошо, ну и svn —help вам в помощь