Как правильно восстановить удаленный файл из SVN?
Я удалил файл из РЕПО и теперь его нужно вернуть. Лучшее, что я могу понять, это:
- обновление до версии перед удалением
- скопировать файлы в другое место
- обновление по голове
- скопировать файлы
- добавить
- commit
Это просто плохо пахнет, и он теряет всю историю для загрузки. Должен быть лучший способ сделать это. Я уже заглянул в SVN Книга но ничего не нашел и теперь смотрю вниз по списку тегов SVN.
9 ответов:
используйте SVN merge:
svn merge -c -[rev num that deleted the file] http://<path to repository>вот пример:
svn merge -c -12345 https://svn.mysite.com/svn/repo/project/trunk ^ The negative is importantдля TortoiseSVN (я думаю...)
- щелкните правой кнопкой мыши в Проводнике, перейдите в TortoiseSVN - > Merge...
- убедитесь, что выбран параметр "объединить диапазон ревизий", нажмите кнопку Далее
- в текстовом поле" диапазон ревизий для слияния " укажите ревизию, которая удалила файл
- установите флажок "обратное слияние", нажмите кнопку Далее
- клик Слияние
это совершенно непроверено, однако.
отредактировано OP: это работает на моей версии TortoiseSVN (старый вид без следующей кнопки)
- перейдите в папку, что материал был удален из
- щелкните правой кнопкой мыши в Проводнике, перейдите в TortoiseSVN - > Merge...
- на С раздел введите ревизию, которая сделала удаление
- на до раздел введите ревизию перед удалением.
- Нажмите кнопку "объединить"
- commit
хитрость заключается в слиянии назад. Слава Шон.светлая за то, что указал мне в правильном направлении!
Edit: мы используем разные версии. Метод, который я описал, отлично работал с моей версией TortoiseSVN.
также следует отметить, что если было несколько изменений в фиксации при обратном слиянии вы захотите отменить эти другие изменения, как только слияние будет выполнено до фиксации. Если нет, эти изменения будут отменены.
проблема с выполнением слияния svn, как предложил Шон Брайт, заключается в том, что он повторно вводит другие изменения, внесенные в ту же ревизию, что и удаление. Копия svn-это более целенаправленная операция, которая будет влиять только на удаленные файлы.
с помощью Tortoise SVN вы можете воскресить файл, который был удален из каталога рабочей копии и из более поздних версий SVN, с помощью копии svn следующим образом:
- перейдите в папку рабочей копии, которая ранее содержала папка.
- щелкните правой кнопкой мыши на папке в Проводнике, перейдите в TortoiseSVN - > показать журнал.
- щелкните правой кнопкой мыши на номере редакции непосредственно перед редакцией, которая удалила файл и выберите "обзор репозитория".
- щелкните правой кнопкой мыши на удаленном файле и выберите "Копировать в рабочую копию...- и спасти.
удаленный файл теперь будет находиться в папке рабочей копии. Чтобы повторно добавить его обратно в SVN, щелкните правой кнопкой мыши на восстановленном файле и выберите SVN Совершать.
NB: этот метод сохранит предыдущую историю восстановленного файла, однако для просмотра предыдущей истории в журнале TortoiseSVN вам нужно убедиться, что "остановить при копировании/переименовании" не установлен в диалоговом окне сообщения журнала.
для полноты картины, это то, что вы нашли бы в книге svn, если бы знали, что искать. Это то, что вы уже обнаружили:
Воскрешение Удаленных Элементов
то же самое, из более поздней (и подробной) версии книги:
используйте функцию копирования Tortoise SVN для возврата внесенных изменений:
- щелкните правой кнопкой мыши родительскую папку, содержащую удаленные файлы / папку
- выберите "Показать журнал"
- выберите и щелкните правой кнопкой мыши на версии, перед которой были сделаны изменения/удалены
- выберите "Просмотр репозитария"
- Выберите файл/папку, которая должна быть восстановлена, и щелкните правой кнопкой мыши
- выберите "Копировать в", который будет копировать файлы / папки в головной редакции
надеюсь, что это поможет
Я всегда использую SVN copy в качестве операции сервера, поэтому не уверен, что он работает с двумя рабочими путями.
вот пример восстановления удаленного файла в локальную рабочую копию проекта:
svn copy https://repos/project/modules/module.js@3502 modules/module.jsнаходясь внутри каталога проекта. Это работает также и для восстановления целых каталогов.
Если вы используете Tortoise SVN, вы должны иметь возможность вернуть изменения только из этой ревизии в свою рабочую копию (эффективно выполняя обратное слияние), а затем сделать еще одну фиксацию для повторного добавления файла. Следующие шаги:
- перейдите в папку в рабочей копии, где вы удалили файл.
- перейти в репо-браузер.
- перейдите к редакции, где вы удалили файл.
- В списке изменений, найдите файл, который вы удаленный.
- щелкните правой кнопкой мыши на файл и выберите "Отменить изменения из этой ревизии".
- Это позволит восстановить файл в рабочей копии, сохраняя историю.
- зафиксируйте файл, чтобы добавить его обратно в репозиторий.
с Tortoise SVN:
Если вы еще не зафиксировали свои изменения, вы можете сделать возврат в родительской папке, где вы удалили файл или каталог.
Если вы уже зафиксировали удаленный файл, то вы можете использовать браузер репозитория, перейти к ревизии, где файл все еще существовал, а затем использовать команду копировать... из контекстного меню. Введите путь к вашей рабочей копии в качестве цели и удаленный файл будет скопирован из репозитория в вашу рабочую копию.
самый простой способ, которым я смог восстановить файлы и не потерять историю ревизий, - это использовать SVN copy, пример слияния выше мне кажется более сложным способом достичь того же самого. Почему существует необходимость в слиянии, когда вы просто хотите восстановить ревизию?
Я использую следующее В этом случае, и это работает довольно хорошо.
svn copy -m 'restoring file' -r <rev_number_file_to_restore> http://from/file.cs http://pathTo/file.csЯ всегда, кажется, использую
svn copyкак серверная операция, поэтому не уверен, что она работает с двумя рабочими пути.
вы должны быть в состоянии просто проверить один файл, который вы хотите восстановить. Попробуйте что-то вроде
svn co svn://your_repos/path/to/file/you/want/to/restore@revздесьrev- последняя редакция, при которой файл существовал.Я должен сделать именно это некоторое время назад и, если я правильно помню, с помощью до
svnне сработало; я должен был использовать:revсинтаксис. (Хотя я, возможно, помнил его в обратном порядке...)
Comments