Практичный способ фиксации изменений в системе контроля версий в нескольких ветвях.
Распространенным сценарием при использовании контроля версий является наличие ветки разработки вместе с версионными ветками релиза. Мы используем CVS с HEAD в качестве ветви разработки и веткой с именем, например, release-6-2 для текущей версии продукта.
Разработка новых функций идет только в ветке разработки, но исправления ошибок иногда нужно проверять как в ветке разработки, так и в текущей ветке выпуска. Иногда это может быть довольно утомительным, поэтому я ищу практические способы сделать это.
Когда синхронизируемый файл синхронизируется в двух ветвях, я, в частности, ищу быстрое решение "зафиксировать в этих ветвях".
(Мы используем CVS в качестве нашей системы управления исходным кодом, поэтому любые ответы, специфичные для CVS, хороши. Однако, также интересно посмотреть, могут ли другие системы управления исходным кодом предложить лучший способ. На стороне клиента мы используем Eclipse, поэтому решения Eclipse хорошо. Но если у вас есть решение не от Eclipse, это тоже хорошо.)
2 ответа
Примените ваше исправление к самой старой ветке релиза. Затем объедините изменения со следующей веткой выпуска и так далее, пока вы не объединитесь из последней ветки выпуска в ГОЛОВУ.
Скажем, самая старая версия вашего продукта - 1.0, и у вас также есть версии 1.1 и 1.5. Новые функции для следующего выпуска добавляются в HEAD. Если в 1.0 обнаружена ошибка, вы применяете исправление к ветке 1.0. Слияние с ветки 1.0 до 1.1. Слияние с 1.1 до ветки 1.5 и, наконец, слияния с ветки 1.5 в ГОЛОВУ.
Объединение из ветви в ветку лучше, чем применение исправления вручную для каждой ветви.
С CVS вы должны вручную отслеживать, какие версии объединяются, чтобы не включать те же ревизии при следующем объединении.
Если вы переключитесь на использование Subversion, объединение из одной ветки в другую станет проще. Инструмент подрывной деятельности Eclipse будет отслеживать, какие ревизии вы ранее слили, значительно упрощая задачу повторных слияний между двумя ветвями.
Переход на Subversion из CVS очень прост (иш). Вы не будете первым, кто сделал такой шаг.
Как сказал Уолше, лучше объединяться между ветвями. Чтобы выбрать слияние, очень хорош метод, описанный в Pragmatic Version Control с использованием CVS:
В ветке - тег (PRE_FOO
) перед изменением внесите изменения и зафиксируйте, пометьте после изменения (POST_FOO
). Затем в транке слить с помощью тегов:
cvs up -j PRE_FOO -j POST_FOO
Объединение веток намного проще и безопаснее в SVN, и легко преобразовать всю историю CVS в SVN - см. Cvs2svn. Вы должны использовать либо SVN 1.5, либо - с более ранними версиями SVN - svnmerge.