Как правильно восстановить удаленный файл из SVN?



Я удалил файл из РЕПО и теперь его нужно вернуть. Лучшее, что я могу понять, это:




  • обновление до версии перед удалением

  • скопировать файлы в другое место

  • обновление по голове

  • скопировать файлы

  • добавить

  • commit


Это просто плохо пахнет, и он теряет всю историю для загрузки. Должен быть лучший способ сделать это. Я уже заглянул в SVN Книга но ничего не нашел и теперь смотрю вниз по списку тегов SVN.

1017   9  

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 для возврата внесенных изменений:

  1. щелкните правой кнопкой мыши родительскую папку, содержащую удаленные файлы / папку
  2. выберите "Показать журнал"
  3. выберите и щелкните правой кнопкой мыши на версии, перед которой были сделаны изменения/удалены
  4. выберите "Просмотр репозитария"
  5. Выберите файл/папку, которая должна быть восстановлена, и щелкните правой кнопкой мыши
  6. выберите "Копировать в", который будет копировать файлы / папки в головной редакции

надеюсь, что это поможет

Я всегда использую SVN copy в качестве операции сервера, поэтому не уверен, что он работает с двумя рабочими путями.

вот пример восстановления удаленного файла в локальную рабочую копию проекта:

svn copy https://repos/project/modules/module.js@3502 modules/module.js

находясь внутри каталога проекта. Это работает также и для восстановления целых каталогов.

Если вы используете Tortoise SVN, вы должны иметь возможность вернуть изменения только из этой ревизии в свою рабочую копию (эффективно выполняя обратное слияние), а затем сделать еще одну фиксацию для повторного добавления файла. Следующие шаги:

  1. перейдите в папку в рабочей копии, где вы удалили файл.
  2. перейти в репо-браузер.
  3. перейдите к редакции, где вы удалили файл.
  4. В списке изменений, найдите файл, который вы удаленный.
  5. щелкните правой кнопкой мыши на файл и выберите "Отменить изменения из этой ревизии".
  6. Это позволит восстановить файл в рабочей копии, сохраняя историю.
  7. зафиксируйте файл, чтобы добавить его обратно в репозиторий.

с 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

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