Я продолжал работать в транке, когда я должен был создать ветку для некоторых важных изменений (Subversion, TortoiseSVN) - PullRequest
8 голосов
/ 23 апреля 2011

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

Но я не создал новую ветку. Вместо этого я продолжал работать над стволом.

Here is the situation we started with

Trunk теперь на rev.1116, и я нахожусь в незавидном (?) Положении, что я должен исправить некоторые ошибки в ревизии около 15 версий назад, которая является текущим выпуском в производство, а затем выпустить исправленную ошибку "rev. 1101 + исправления "в производство без каких-либо работ с рев. 1102-1116.

Вопрос: Как «восстановить» Магистраль и переместить все последние изменения в Ветвь? Я создаю Ветвь из того, что сейчас находится в Магистрали, и которая становится / Branches / MajorChangeSet, затем Вернуть Trunk обратно на rev.1101, считать его теперь официальным Trunk и начать там исправлять ошибки?

A map of our SVN revisions, branches, etc.

ОБНОВЛЕНИЕ: Я следовал процедуре, рекомендованной ChrisH ниже (согласно макету выше), и теперь мы в отличной форме. Мы продолжаем обновлять «rev. 1102 production» с исправлениями и незначительными улучшениями функций. Они были безболезненными и их легко объединить, чтобы убедиться, что эти изменения также внесут свой вклад в наши новые усилия по разработке. Спасибо всем!

Ветвь v. Ствол | Ветка / Метка / Ствол? | ветка когда?

Ответы [ 4 ]

5 голосов
/ 23 апреля 2011

Я рекомендую создавать ветку релиза каждый раз, когда вы начинаете делать кандидатов на релиз.Магистраль остается в живых для работы над вещами, не входящими в релиз (версия .next, как мы говорим).Ветвь релиза зарезервирована только для исправлений ошибок и всего, что должно быть в релизе.Хорошей практикой является всегда сначала фиксировать их в транк, а затем собирать их в ветку релиза.Всегда пытайтесь объединить FROM trunk с другими ветвями, потому что это облегчает задачу.Реинтеграция «ветвей функций» в ствол - это хорошо, но следует избегать исправления ошибки в ветке релиза, а затем сливать ее обратно в ствол.

После выхода релиза ветка релиза сохраняется для исправления.дополнительные ошибки и в конечном итоге делать незначительные выпуски.Вы все равно должны сначала исправить ошибки в trunk (нет смысла отправлять их в выпуске .next) и объединить их с каждой веткой релиза, которую вы все еще активно поддерживаете.

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

После того, как вы получили ветку релиза, вам нужно проверить ее и начать объединять исправления ошибок.Вы хотите выпустить.Вся ваша новая работа в багажнике остается там, где она есть.Если ствол и ветвь релиза значительно разошлись, то вам может потребоваться просто внести исправления непосредственно в ветку релиза, но попробуйте внести их в ствол и объединить с веткой релиза, когда сможете.

Еще одна вещь,Каждый раз, когда вы отправляете релиз из ветки релиза, вы должны делать копию в тегах с меткой версии релиза.Позже может быть полезно выяснить, что изменилось между выпусками или перестроить старый выпуск, если вам нужно.Мы дошли до того, что выполнили полную сборку из тега, когда отправляем релиз, потому что мы встраиваем номер редакции SVN в нашу версию продукта, чтобы, если клиент сообщает об ошибке, мы точно знали, какой код он выполняет (поскольку редакции SVN уникальны).через хранилище).

Надеюсь, что это помогает, и удачи.

0 голосов
/ 23 апреля 2011

Один из способов исправить это -

  • сделать рабочую ветку из HEAD транка
  • удалить транк
  • воссоздать транк из ревизии транка до вашегослучайные изменения

Таким образом, вы не увидите случайных фиксаций и реверсий в журнале / вине на стволе.Но будьте внимательны при обновлении рабочих копий - я не уверен, насколько хорошо svn update обрабатывает удаление и воссоздание расположения хранилища.

0 голосов
/ 23 апреля 2011

Ну, это какой-то беспорядок, независимо от того, как вы на это смотрите, но вы также не сделали ничего явно неправильного.Вы просто продолжили разработку в своем транке - и это правильно - но теперь вам нужно вернуться к предыдущей ревизии и добавить некоторые изменения, а затем повторно выпустить.

Похоже, у вас есть серияверсий с исправлениями ошибок и новыми функциями, и вы просто пытаетесь принять ошибки с определенного момента времени и игнорировать все остальное.Было бы немного проще, если бы исправления ошибок были в дискретных ревизиях (по крайней мере, для целей идентификации), но часто они сопровождают другие изменения.

Два варианта:

  1. Взятьветвь последней ревизии, которую вы выпустили, затем вручную переместите исправления ошибок.
  2. Возьмите ветку последней ревизии, в которой было исправлено ошибку, затем удалите новые функции.

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

0 голосов
/ 23 апреля 2011

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

Чтобы создать ветку ретроспективно, попробуйте:

svn copy http://svn/path/to/trunk@1101 \
         http://svn/path/to/branches/last_monday_release

@1101 - это ревизия колышка - по сути, мы говорим "выяснить, что trunk указано в ревизии 1101, а затем скопировать это, чтобы сделать ветвь".

(в книге SVN есть страшное объяснение исправлений привязки, если вы чувствуете себя смелым)

...