Какой простой способ восстановить файл в 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 думая, что это просто удалит его из системы управления версиями и волнуется, когда сам файл фактически исчез. Итак, под-вопрос: Как правильно удалить файл из системы управления версиями, фактически не удаляя локальную копию?
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
по какой причине
-rarg не работал для меня (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 это очень легко сделать с помощью браузера РЕПО. В браузере РЕПО переключитесь на ревизию перед удалением файла (вы можете изменить версию с помощью кнопки" ревизия: "в правом верхнем углу):
вы должны быть в состоянии увидеть удаленный файл в его исходном местоположении в браузере РЕПО. Щелкните правой кнопкой мыши на нем и выберите " Копировать в рабочий копировать...":
затем файл будет восстановлен в вашу рабочую копию, готовую к фиксации (как если бы svn был добавлен) и с неповрежденной историей журнала.
Я использовал пункт меню копировать из предыдущей редакции с помощью tortoise, работал для меня и сохранил историю.


Comments