Я работаю над проектом, использующим svn. Я проверяю его последнюю версию в каталоге (используя svn checkout http://url /path/to/dest
). Я сделал некоторые модификации, поэтому я svn add
измененные файлы, а затем svn commit
изменения.
К сожалению, я внес изменения не в ту ветку. Прямо сейчас я пытаюсь выполнить svn update для конкретной фиксации в другой ветке, используя svn update -r 1234
, и я получаю следующее сообщение об ошибке:
svn: E160005: Target path '/dev/branches/project' does not exist
Я переключился на правильную ветку с svn switch http://url
, но все еще получаю то же сообщение об ошибке. Как я могу правильно вернуться к этой фиксации?
Я думаю, у вашего подхода есть несколько проблем.
Во-первых, изменения, которые вы фиксируете в Subversion, - это необратимый¹,, поэтому первое, что вы должны сделать, это фактически «отменить» эффекты неправильной фиксации.
Поскольку любую фиксацию можно рассматривать как «патч», который определяет, что и как изменить - по сравнению с состоянием репозитория, предшествующим фиксации, для отмены изменений, внесенных фиксацией, вы записываете другую фиксацию, которая имеет изменения, прямо противоположные изменениям в исходный коммит.
Это делается с помощью слияние, ваша неправильная фиксация очередной раз, но вы указываете Subversion применить свои изменения в обратном порядке - см. это для получения дополнительной информации.
Во-вторых, вы хотите, чтобы в другой ветке появилась неправильная фиксация. Это называется «выбор вишни»: вы хотите перенести конкретное изменение, записанное где-то в другом месте, в другую ветку.
Здесь - вот как это делается.
¹ То есть от клиента. С помощью специализированных инструментов можно провести специальную операцию на физическом хранилище. Но я думаю, что это не то, что мы хотим здесь делать.