Какой простой способ восстановить файл в Subversion? - PullRequest
68 голосов
/ 31 января 2009

Эти инструкции немного пугают и запутывают: http://svnbook.red -bean.com / ru / 1.0 / ch04s04.html # svn-ch-4-sect-4.3 . Кроме того, они, похоже, не упоминают, что намного проще, если вы еще не зарегистрировались после выполнения «svn rm» [1].

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

[1] Новичку в SVN может показаться, что «svn rm» немедленно уничтожает файл. Я вспоминаю, что делал svn rm, думая, что это просто вывело бы его из-под контроля исходного кода, и бесился, когда сам файл фактически исчезал. Таким образом, подвопрос заключается в том, как правильно удалить файл из системы управления версиями, фактически не удаляя локальную копию?

Ответы [ 6 ]

83 голосов
/ 31 января 2009

Если вы только что сделали

svn rm foo.txt

тогда вы можете отменить это просто

svn revert foo.txt

Если вы уже зарегистрировались после выполнения операции "svn rm", вы можете просмотреть журнал (svn log), найти последнюю ревизию, в которой существовал файл, и извлечь ее из этой версии.

Один из способов сделать это - объединить старую ревизию с файлом. Предполагая, что текущая ревизия равна 123, а последняя версия с этим файлом - 120, сделайте следующее:

svn merge -r123:120

Может быть, сначала выполните пробный прогон, чтобы убедиться, что он не будет делать то, что вам не нужно:

svn --dry-run merge -r123:120

Для подвопроса, как удалить файл из SVN, не удаляя локальную копию:

svn rm foo.txt --keep-local

Или, конечно, вы можете просто скопировать во временный файл перед svn rm'ing и затем скопировать обратно:

cp foo.txt foo.txt-tmp
svn rm foo.txt
(svn ci -m "just removed foo.txt from the repository")
cp foo.txt-tmp foo.txt
41 голосов
/ 10 марта 2010

по любой причине, аргумент -r не работал для меня (SVN версия 1.6.9). Я пытался до и после src, но продолжал получать сообщение, что файл не найден в текущей ревизии (дух). То же самое с --revision. Хотя использование синтаксиса в стиле @ работало:

svn cp url/to/removed/foo.txt@4 foo.txt
31 голосов
/ 31 января 2009

Чтобы удалить файл, но сохранить его в рабочей копии, используйте

svn rm foo.txt --keep-local

Чтобы вернуть файл после того, как вы зафиксировали удаление, вы можете использовать либо команду слияния, либо команду копирования - оба сохранят историю файлов. Поскольку способ объединения уже описан в другом месте, вот способ копирования:

svn rm foo.txt
svn ci foo.txt -m "removed file"
(now at r5 as an example)
svn cp url/to/removed/foo.txt -r4 foo.txt
svn ci foo.txt -m "got file back"
5 голосов
/ 12 марта 2018

Для пользователей TortoiseSVN это очень легко сделать с помощью браузера Repo. В Repo Browser переключитесь на ревизию перед удалением файла (вы можете изменить версию, используя кнопку «Revision:» в правом верхнем углу):

enter image description here

После этого вы сможете увидеть удаленный файл в его исходном местоположении в браузере репо. Щелкните правой кнопкой мыши по нему и выберите «Копировать в рабочую копию ...»:

enter image description here

Затем файл будет восстановлен в вашей рабочей копии, готовой к фиксации (как если бы svn добавлен) и с сохраненной историей журнала.

2 голосов
/ 03 апреля 2017

Чтобы восстановить удаленный файл в SVN. Найдите номер ревизии непосредственно перед удалением (скажем, 341). Затем верните один файл к этому номеру ревизии.

svn up -r341 [path_to_deletedFile]
1 голос
/ 29 апреля 2013

Я использовал пункт меню «Копировать» из предыдущей версии, используя черепаху, работал для меня и сохранял историю.

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