Какой простой способ восстановить файл в подрывной программе?

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

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

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

Ответ 1

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

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

Ответ 2

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

svn cp url/to/removed/[email protected] foo.txt

Ответ 3

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

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"

Ответ 4

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

Ответ 5

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

svn up -r341 [path_to_deletedFile]