Стереть ветку Subversion

Мне поручили объединить несколько веток обратно в ствол в Subversion. В настоящее время настройка проекта выглядит примерно так.

trunk
branches
    BranchA
    BranchB
    BranchC
tags
    // A bunch of tags (1 per release)

Цель состоит в том, чтобы интегрировать BranchA и BranchB обратно в ствол, а затем каким-то образом «спрятать» их.

Я думаю, что знаю, как сделать фактическое слияние. Щелкните правой кнопкой мыши ствол в проводнике Windows и TortoiseSVN > Merge..., затем Reintegrate a branch, выберите ветку и объедините.

Вопрос 1 - правильный ли это метод?

Я также не уверен, как будет выглядеть репозиторий после того, как я это сделаю. Мы хотим убедиться, что будущие разработчики не будут по ошибке работать со старыми ветками.

Вопрос 2 - Будет ли ветка неработоспособной после слияния или нужно будет что-то еще делать? Можно ли "удалить" ветку? Если да, то что будет с историей ветки? Или нам нужно будет сделать что-то хакерское, например, применить блокировки к ветке?

Спасибо за любую помощь.


person Snowy Coder Girl    schedule 07.02.2013    source источник


Ответы (2)


Вопрос 1 - правильный ли это метод?

Да, это объединит содержимое ветки в ваш рабочий каталог. С репозиторием ничего не произойдет, пока вы не зафиксируете (вновь объединенный) ствол. Как только вы зафиксируете, не только изменения ствола будут в репо, но и запомнят, что было объединено из ветки.

Вопрос 2 - Будет ли ветка неработоспособной после слияния или нужно будет что-то еще делать?

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

Если вы хотите удалить ветку, самый простой способ, который я нашел, — открыть браузер репо, щелкнуть правой кнопкой мыши ветку и выбрать «Удалить». Ветка исчезнет из последней версии. Он по-прежнему будет в истории репо, и вы можете вернуть его, если это необходимо, но кто-то, кто делает новую проверку, не увидит его.

person Ferruccio    schedule 07.02.2013
comment
Если вы удалите ветку, как вы сможете увидеть/получить историю? - person Snowy Coder Girl; 08.02.2013
comment
Ах. Когда вы открываете браузер репозитория, вам просто нужно вернуться к версии, в которой все еще была ветвь. Интересно, есть ли способ увидеть все когда-либо существовавшие ветки? - person Snowy Coder Girl; 08.02.2013

Из командной строки (ответ на вопрос 1):

$ cd $DEVROOT/trunk

$ svn merge http://company.org/svn/proj/branches/BranchA
....
$ svn ci -m 'Merged BranchA'
$ cd rm -m 'BranchB already merged' http://company.org/svn/proj/branches/BranchA

$ svn merge http://company.org/svn/proj/branches/BranchB
....
$ svn ci -m 'Merged BranchB'
$ cd rm -m 'BranchB already merged' http://company.org/svn/proj/branches/BranchB

Слияние ствола с ветвью и обратное слияние с стволом недопустимо при использовании SVN. Почему - читайте:

Я не могу ответить на ваш вопрос2, так как не знаю ваших реальных требований... Рекомендую прочитать официальное руководство:

и предлагаем использовать лист features для разработки функций и лист branchs для долгосрочной поддержки версий и tags для выпусков.

И не рекомендуется удалять какие-либо ветки. Почему? Потому что удаление в SVN не делает репозиторий меньше... Только укорачивайте вывод svn ls...

Посмотрите на мой гайд:


  • Каждый основной выпуск имеет свою ветку.
  • Еще одна ветвь, зарезервированная для разработки.
  • Ветка последней основной версии активна. Все старые основные ветви пассивны.
  • Пассивные основные ветки использовались только для незначительных исправлений ошибок в последнем коде из этой серии основных версий (без новых функций).
  • Особенности, разработанные в ветке разработки. Перед выпуском в объединенной с активной основной ветке выпуска.
  • Ошибка была исправлена ​​в ветке самой старой основной версии, для которой она должна быть предоставлена ​​и объединена со всеми ветками следующей основной версии и веткой разработки.
  • Выпуск означает завершение разработки набора функций и исправлений ошибок в ветках и перенос сборки продукта на сервер выпуска.
  • После тестирования и стабилизации был выпущен релиз. Это означает:

    • VERSION file was updated.
    • Файл CHANGE был заполнен набором функций, версией, данными и номером версии VCS.
    • Пометить релиз тегом в VCS.
    • Вызвать сборку исходников, помеченных тегом. Скопируйте результат на сервер выпуска.
  • Если ошибка обнаружена в какой-либо версии, она исправлена ​​​​в ветке разработки и выпущена с новой минорной/исправленной версией продукта.

  • Предыдущие основные/дополнительные версии не поддерживаются (просто используйте последнюю версию). Пользователи всегда вынуждены обновляться до последней версии.

Здесь t - теги, b - ветки:


  +--+-----+----------------------+-----+----+------+------+----->
  dev|     |            ^     ^   |     |    |      |      |
     |     |            |     |   |     |    v      v      v
     |     |            |     |   |     |    +--+------+------+-->
     |     |            |     |   |     |    b2 |      |      |
     |     |            |     |   |     |       v      v      v
     |     |            |     |   |     |      t2.0.0 t2.0.1 t2.1.0
     v     v            |     |   v     v
    t0.1.0 +---+------+-+---+-+-----+------+------+------+------+--->
           b1  |      |     |       |      |      |      |      |
               v      v     v       v      v      v      v      v
              t1.0.0 t1.0.1 t1.0.2 t1.1.0 t1.2.0 t1.2.1 t1.2.2 t1.2.3

В этом примере мы выпускаем теги 1.0.1 и 1.0.2 с исправлениями ошибок в ветке 1, поскольку ветка разработки не была готова к работе.

person gavenkoa    schedule 07.02.2013
comment
Если вы хотите удалить старые ветки, почему бы не поискать интеграцию Git/Mercurial с SVN?? - person gavenkoa; 07.02.2013