2013-03-04 4 views
0

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

Можно ли указать, что моя местная версия (рабочая копия) - это новая текущая версия, без обновления из SVN?

+0

Вы должны правильно использовать термины Subversion, потому что вы ** не вернулся ** (AFAICS), но обновлено до более старой (не-head) редакции вашего WC –

ответ

1

ответ, кажется, svn up --accept mine-full

+0

Это будет работать. Вы в основном сворачиваете свои изменения обратно в текущую ревизию. –

+0

Я пробовал это. Кажется, что 'accept mine' действительно говорит svn, чтобы сохранить вашу часть работы, но в случае, если некоторые каталоги были переименованы или удалены, они снова появятся после этой команды, поэтому вам придется выполнить ручную очистку. Но это упростило проблему в моем случае. – Sebas

0

1) возьмите резервную копию своей конечной базы кода где-нибудь еще на вашем жестком диске.
2) принимать обновления
3) удалить все из SVN
4) Скопируйте и вставьте весь код базы из резервной копии диска
5) Зафиксируйте

ИЛИ

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

+0

Я попробовал это (копия и очистка), но svn, похоже, делает правильные вещи и отслеживает даты. – ochensati

1

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

Есть две вещи, которые вы можете сделать:

  1. Перейти голову и обновление до последней версии. Subversion не будет перезаписывать ваши изменения, но вместо этого будет просто обновлять, где это возможно. Могут быть некоторые конфликты. Все зависит от того, насколько старый код вы изменили. Например, мы сейчас в редакции 12 001, и я проверил ревизию 11 980, потому что это то, что было на нашем сервере, и я отлаживал ее. Я исправил несколько незначительных проблем в двух файлах. Обновление самой последней версии обновит все файлы, даже файлы, над которыми я работал, но не те области тех файлов, над которыми я работал. Скорее всего, это действительно то, что я хочу сделать. (Конечно, тщательно проверьте, как только вы обновите!).
  2. Создайте новую ветку, основанную на вашей ревизии. Subversion может сделать это за миллисекунду. Затем сделайте изменения в этой новой ветке.

Давайте снова предположим, я проверил версию 11,980 и последняя редакция была 12,0001:

$ svn co -r 11980 http://path/to/my/project workdir 
$ cd workdir 
...a bunch of changes 
$ svn commit -m"My changes" 
SVN Error: you need to update first... 
$ svn copy -r11900 http://path/to/my/[email protected] http://path/to/branches/my_branch/project 

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

$ svn switch http://path/to/branches/my_branch/project 

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

$ svn commit -m"My changes" 
$ It worked! 

Теперь, если я хочу, я могу объединить свои изменения обратно к первоначальному проекту:

$ svn co http://path/to/my/project workdir2 
$ cd workdir2 
$ svn merge http://path/to/branches/my_branch/project 
Смежные вопросы