Реинтеграция ветки Subversion

Когда ветка снова присоединяется к стволу, действительно ли эта ветка мертва?

Можете ли вы внести изменения в ветку после реинтеграции и объединить их обратно в ствол позже?

Думаю, вам следует пересмотреть принятый ответ, потому что он больше не соответствует действительности. Проблема не существует в современных клиентах Subversion.

bahrep 15.01.2016 12:55
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
69
1
55 044
10
Перейти к ответу Данный вопрос помечен как решенный

Ответы 10

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

Только логи разные. Журнал ветки будет более подробным, например, в нем будет указан истинный автор.

Hugo 27.10.2008 18:01

Пожалуйста, см. Ответ Пини Резника и статью, на которую ссылаются в нем, о том, почему вам следует нет продолжать использовать ветку (даже если это технически возможно).

mhagger 10.02.2010 15:30

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

detly 31.05.2010 12:17

Вы можете выполнять слияние из ветки в магистраль или из магистрали в ветку столько раз, сколько захотите.

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

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

Как все уже здесь сказали: ветка не мертва, и ее выполнение может продолжаться нормально.

Иногда вы хотите убить ветку после слияния. Единственное надежное решение - удалить ветку. Обратной стороной является то, что тогда сложнее снова найти ветку, если вы хотите взглянуть на нее, скажем, по историческим причинам. Таким образом, многие люди оставляют «важные» ветки лежать без дела и соглашаются не менять их. Я хотел бы, чтобы был способ пометить ветку как мертвую / только для чтения, чтобы никто не мог зафиксировать ее до дальнейшего уведомления.

Свн МВ ^ / ветки / фу ^ / ветки / .dead / фу

Jerome Baum 04.10.2011 11:44

Несколько советов по объединению изменений обратно, если кто-то вносит изменения в ветку несколько раз (до 1.5): Помните, в какой ревизии вы выполняли слияние! Либо запишите где-нибудь номера ревизий, или же (что проще) сделать бирку. (Вы, конечно, можете узнать это позже, но это PITA.)

Пример:

У вас есть такой макет репозитория:

/your_project
  /trunk
  /branches
  /tags

Допустим, это веб-приложение, и вы запланировали его выпуск. Вы должны создать тег и из него (или из ствола) ветку, в которой вы исправляете ошибки:

/your_project
  /trunk
  /branches
    /1.0.0-bugfixes
  /tags
    /1.0.0

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

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

/your_project
  /trunk
  /branches
    /1.0.0-bugfixes
  /tags
    /1.0.0
    /1.0.1
    /1.0.2

Теперь вы можете просто интегрировать изменения между 1.0.0 и 1.0.2 в свою магистраль (при условии, что вы находитесь в своей рабочей копии):

svn merge http://rep/your_project/tag/1.0.0 http://rep/your_project/tag/1.0.2 .

Вот о чем следует помнить. Вы уже объединили изменения между 1.0.0 и 1.0.2 в стволе. Предположим, в текущем производственном выпуске есть больше изменений:

/your_project
  /trunk
  /branches
    /1.0.0-bugfixes
  /tags
    /1.0.0
    /1.0.1
    /1.0.2
    /1.0.3
    /1.0.4

Теперь вы готовы выпустить новую версию из транка, но последние изменения ваших исправлений все еще отсутствуют:

svn merge http://rep/your_project/tag/1.0.2 http://rep/your_project/tag/1.0.4 .

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

/your_project
  /trunk
  /branches
    /1.0.0-bugfixes
    /1.1.0-bugfixes
  /tags
    /1.0.0
    /1.0.1
    /1.0.2
    /1.0.3
    /1.0.4
    /1.1.0
Ответ принят как подходящий

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

Вы можете найти полное обсуждение причины этого здесь: Subversion слияние реинтегрировать

По сути, в нем говорится, что можно снова объединить ваши изменения в ствол, но поскольку реинтеграция вынуждает вас выполнять слияние из ствола в ветку до операции реинтеграции, вы столкнетесь с отражающим / циклическим слиянием, что очень проблематично в Subversion 1.5. .
Согласно статье, рекомендуется удалить реинтегрированную ветку сразу после реинтеграции и вместо нее создать новую с тем же (или другим) именем.

Это известное поведение Subversion, которое будет исправлено в будущей версии (возможно, в 1.6).


Кто-нибудь знает, была ли решена проблема реинтеграции в Subversion 1.6?

bradhouse 28.07.2009 03:39

Я обратился к svn v1.6 в stackoverflow.com/questions/3309602. Краткая версия: да, вы можете реинтегрироваться несколько раз. :)

Andres Jaan Tack 23.07.2010 02:04

Пини, ваша ссылка на «Subversion merge reintegrate» кажется неработающей или, по крайней мере, требует некоторой аутентификации для совместной работы. Вы знаете, можно ли получить доступ к статье в другом месте без аутентификации?

Kaitsu 17.02.2011 10:48

Я думаю, что это оригинальная статья: blogs.collab.net/subversion/2008/07/subversion-merg, и это предыдущее обсуждение: svn.haxx.se/dev/archive-2007-11/0729.shtml

Pini Reznik 17.02.2011 11:46

Голосование против, потому что ответ больше не актуален.

bahrep 15.01.2016 12:53

После реинтеграции из ветки в ствол вы должны сделать одно из двух:

  • Удалите свою ветку. Это самый простой способ, но он затрудняет просмотр истории ветки.

  • Скажите своей ветке не объединять коммит реинтеграции. Если вы реинтегрируетесь в магистраль и зафиксируете ее как ревизию X, вы можете запустить эту команду в своей ветке: svn merge --record-only -c X url-to-trunk. Однако вам не следует этого делать, если вы внесли какие-либо изменения в рамках фиксации, кроме самого слияния. Любые другие изменения никогда не вернутся в вашу ветку.

Фактически, вам нужно выполнить слияние --record-only из ствола в вашу ветку ревизии, созданной коммитом --reintegrate:

$ cd trunk
$ svn merge --reintegrate ^my-branch 
$ svn commit

Committed revision 555. 
# This revision is ^^^^ important

И теперь вы записываете это

$ cd my-branch
$ svn merge --record-only -c 555 ^trunk 
$ svn commit

Вы счастливы держать ветку сейчас

Более подробная информация находится в Глава 4. Ветвление и слияние, расширенное слияние.

Ответ устарел.

bahrep 15.01.2016 13:01

Прежде всего, вам следует обновить клиент и сервер Subversion, если вы все еще используете Subversion 1.7 или более раннюю версию. Нет причин использовать очень старые выпуски Subversion. По состоянию на 2016 год текущая версия - Subversion 1.9. SVN 1.8 теперь также поддерживается и все еще получает исправления ошибок.

Проблема, о которой вы спрашиваете, была решена в Subversion 1.8. Начиная с SVN 1.8, опция --reintegrate была устарел. Reintegrate слияния теперь выполняются автоматически. См. Примечания к выпуску Subversion 1.8 запись, связанная с улучшением.

Прочтите SVNBook 1.8 | Реинтеграция ветки:

If you choose not to delete your branch after reintegrating it to the trunk you may continue to perform sync merges from the trunk and then reintegrate the branch again. If you do this, only the changes made on your branch after the first reintegrate are merged to the trunk.

...

Only Subversion 1.8 supports this reuse of a feature branch. Earlier versions require some special handling before a feature branch can be reintegrated more than once. See the earlier version of this chapter for more information: http://svnbook.red-bean.com/en/1.7/svn.branchmerge.basicmerging.html#svn.branchemerge.basicmerging.reintegrate

Другие вопросы по теме