Я лично предпочитаю вариант 3. Всякий раз, когда вы делаете слияние, Subversion отслеживает, какие ревизии вы сливаете и откуда. Он делает это в суперсекретном (гласит: общеизвестно, но не редактируйте) свойстве svn:mergeinfo
. То, как SVN хранит эту информацию о слиянии, становится сложным, и в зависимости от того, насколько ваши разработчики знакомы с процессом слияния, он может стать очень запутанным.
Слив B обратно в транк, транк получает svn:mergeinfo
о том, что B между ревизиями X и Y теперь находится в транке. Затем, удаляя и создавая B только что из ствола, B теперь имеет всю необходимую историю и svn:mergeinfo
(поскольку свойство svn:mergeinfo
также было объединено) для журналов, чтобы знать, какие ревизии существуют в ветви (а какие нет). ). Это также помогает избежать конфликтов деревьев (которые никому не нравятся).
Вариант 2 может быть очень опасным. Компания, в которой я работал, полностью запретила слияния только с записями (это стало уголовно наказуемым преступлением), потому что в случае неправильного выполнения код может пропасть без вести. Тем не менее, теория заключается в том, что когда вы реинтегрируете B в транк, то в транке есть все B (и svn:mergeinfo
для соответствия). Выполнение только записи в B предполагает , что B не будет использоваться для производственного кода (потому что он не будет иметь всех последних обновлений), а слияние только записи предоставит некоторую информацию для предотвращения конфликтов дерева (который, опять же, никто не любит).
Вариант 1 является хорошим промежуточным звеном. Ваша ветка B будет очень загромождена svn:mergeinfo
, но, поскольку она суперсекретна (читается: обрабатывается в основном без проблем), если у вас нет огромного количества слияний, она должна хорошо служить вашим потребностям.