Какой простой способ восстановить файл в subversion?



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



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



[1] новичку svn может показаться, что "svn rm" немедленно уничтожает файл. Я вспомните делать svn rm думая, что это просто удалит его из системы управления версиями и волнуется, когда сам файл фактически исчез. Итак, под-вопрос: Как правильно удалить файл из системы управления версиями, фактически не удаляя локальную копию?

556   6  

6 ответов:

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

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

по какой причине -r arg не работал для меня (svn версия 1.6.9). Я пробовал до и после src, но продолжал получать сообщение о том, что файл не был найден в текущей редакции (duh). То же самое с --ревизией. Однако использование синтаксиса @ style работало:

svn cp url/to/removed/foo.txt@4 foo.txt

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

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"

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

svn up -r341 [path_to_deletedFile]

для пользователей TortoiseSVN это очень легко сделать с помощью браузера РЕПО. В браузере РЕПО переключитесь на ревизию перед удалением файла (вы можете изменить версию с помощью кнопки" ревизия: "в правом верхнем углу):

enter image description here

вы должны быть в состоянии увидеть удаленный файл в его исходном местоположении в браузере РЕПО. Щелкните правой кнопкой мыши на нем и выберите " Копировать в рабочий копировать...":

enter image description here

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

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

Comments

    Ничего не найдено.