2010-01-19 2 views
3

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

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

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

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

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

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

Заранее благодарим за ввод!

ответ

2

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

svn merge [email protected] [email protected] . 

будет откатить изменения, сделанные с версией X для пересмотра Y. Кроме того, обратите внимание, что команда SVN слияния имеет параметр -dry-run, чтобы вы могли проверить, что будет сделано, прежде чем делать какие-либо изменения.

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

+0

Принимая это, так как откат назад кажется наиболее разумным вариантом, просто мы должны когда-либо нуждаться в этих изменениях. Благодаря! – rcknight

2

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

От svn log --help:

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

1

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

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

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

В то же время я предлагаю отступали на strategy с командой так неурядицы избежать.

0

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

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

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

 Смежные вопросы

  • Нет связанных вопросов^_^