SVN: Как я могу переместить одну ветку поверх другой? - PullRequest
3 голосов
/ 19 января 2010

Из-за некоторого неправильного управления нашим SVN-репозиторием мы в итоге создали ветку с именем Stable, содержащую стабильную сборку нашего кода (ветка фактически началась с тега последнего выпуска, а не из ствола).

В основном транк «заражен» некоторыми изменениями, сделанными нашим новым программистом, который на самом деле не знал, что они делают.

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

Содержит ли ветвь всю историю до появления ветки? (в каком случае я думаю, что могу просто переместить ветку, чтобы стать стволом?)

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

Итак, вопрос в том, какой мой лучший вариант в этой ситуации?

Заранее спасибо за ваш вклад!

Ответы [ 4 ]

2 голосов
/ 19 января 2010

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

svn merge .@Y .@X .

откатит изменения, внесенные из ревизии X в ревизию Y. Также обратите внимание, что команда svn merge имеет опцию --dry-run, чтобы вы могли проверить, что будет сделано, прежде чем вносить какие-либо изменения.

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

2 голосов
/ 19 января 2010

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

С svn log --help:

Каждое сообщение журнала печатается только один раз, даже если было явно запрошено более одного из затронутых путей для этой ревизии. Журналы следуют за историей копирования по умолчанию. Используйте --stop-on-copy, чтобы отключить это поведение, которое может быть полезно для определения точек ветвления.

1 голос
/ 19 января 2010

Есть несколько вариантов:

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

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

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

0 голосов
/ 19 января 2010

Мне понравилось, как вы описали изменения этого программиста. Итак, если:

  • Вы действительно ненавидите этого программиста и хотите стереть все следы его действий
  • у вас есть доступ администратора к хранилищу

Вы можете очень осторожно сделать svnadmin dump -rX:Y, чтобы выгрузить репо до зараженной ревизии , стереть текущий репо и восстановить его с не зараженным один.

...