Я думаю, что метод Philips был бы чем-то как следующее, предположив, что последний "хороший" пересмотр был в 100, и Вы теперь в 130, для создания нового ответвления:
svn copy -r100 svn://repos/trunk svn://repos/branches/newbranch
svn merge -r 100:130 svn://repos/trunk svn://repos/branches/newbranch
Обратите внимание, что идея состоит в том, чтобы сохранить изменения, внесенные в тех изменениях, таким образом, можно применить их назад для транкинга.
Вернуться соединительная линия:
svn merge -r130:100 .
svn ci -m 'reverting to r100 (undoing changes in r100-130)' .
(Это не имело бы значения, в каком порядке Вы выполнили их, таким образом, Вы могли вернуться соединительная линия прежде, чем создать ответвление.)
Затем Вы могли переключиться на новое ответвление, которое Вы создали в repo:
svn switch svn://repos/branches/newbranch workdir
Честно говоря, я копирую свои изменения прочь, возвращаюсь соединительная линия, ответвление, затем передаю мои изменения в ответвлении. Так как главной причиной будет простота слияния позже (если Вы позже объединитесь от соединительной линии до ответвления в точке разветвления, то слияние будет содержать возвращение Ваших начальных изменений).
Это не может быть "корректным" путем, поскольку можно всегда пропускать изменения при слиянии, но это обычно - намного меньше головной боли для меня позже.Отказ от ответственности: Я не svn гуру, таким образом, это может быть легче для меня, потому что я делаю его неправильно - но я действительно использую svn довольно много.
Нет, ничто неправильно с методом следующего Philip, кроме него не оставляет некоторый "хлам" в истории пересмотра. Если Вы хотели к удаленному их для пользы опрятности, и изменения в ГОЛОВЕ, Вы могли удалить их из репозитория путем следования этим инструкциям.
Обновление: метод Philip лучше, чем тот, предложенный в вопросе по причинам, которые он заявил. Мой и методы Philip были бы подобны, за исключением того, что insead возвращения соединительной линии я предлагаю удалить изменения из истории пересмотра. (как я сказал, это может только быть сделано, если все изменения, которые Вы хотите удалить, во главе репозитория.)
Я не имею svn в наличии прямо здесь, но это - то, как я попытался бы сделать это:
Определите точку в истории, где Вы начали фиксировать плохой материал (скажите, что пересмотр "100", в то время как Вы в "130"),
svn copy trunk branch # create your branch while preserving history
svn copy trunk@100 trunk #replace current revision with revision 100
Это должно обойти плохую историю, не добавляя обратное слияние (на самом деле, Вы обходите историю соединительной линии между 100 и 130, но Вы сохранили ссылку на ту историю в ответвлении и получающий доступ к соединительной линии, в то время как принуждение версии все еще приведет к корректной истории),
Затем
svn switch branch workdir
это должно работать, если Вы хотите полностью удалить изменения из соединительной линии. Если существуют маленькие, Вы хотите сохранить Вас, может избирательно подойти к выбору их снова от ответвления для транкинга (если Вы будете использовать svn 1.5, то это отследит точки слияния и избежит побочных конфликтов),