Я удалил файл из репо и теперь хочу вернуть его. Лучшее, что я могу понять, это:
- обновить до ревизии перед удалением
- скопируйте файлы в другое место
- обновить в голове
- скопируйте файлы обратно
- добавить их
- совершить
Это просто плохо пахнет и теряет всю историю. Должен быть способ сделать это лучше. Я уже просматривал книгу SVN, но ничего не нашел и теперь просматриваю список тегов SVN.
Ответы:
Используйте svn merge:
Итак, пример:
Для TortoiseSVN (я думаю ...)
Однако это совершенно не проверено.
Отредактировано OP : это работает с моей версией TortoiseSVN (старый вид без следующей кнопки)
Хитрость в том, чтобы слить в обратном направлении . Престижность sean.bright за то, что указал мне в правильном направлении!
Изменить: мы используем разные версии. Описанный мной метод отлично работал с моей версией TortoiseSVN.
Также следует отметить, что если в коммите, который вы выполняете обратное слияние, было несколько изменений, вы захотите отменить эти другие изменения после того, как слияние будет выполнено, прежде чем вы сделаете коммит. Если вы этого не сделаете, эти дополнительные изменения также будут отменены.
источник
Проблема с выполнением слияния svn, предложенного Шоном Брайтом, заключается в том, что оно повторно вводит другие изменения, сделанные в той же ревизии, что и удаление. Копирование svn - это более целенаправленная операция, которая влияет только на удаленные файлы.
Используя Tortoise SVN, вы можете воскресить файл, который был удален из каталога вашей рабочей копии и из более поздних версий SVN, через копию svn следующим образом:
Удаленный файл теперь будет в папке рабочей копии. Чтобы повторно добавить его обратно в SVN, щелкните восстановленный файл правой кнопкой мыши и выберите SVN Commit.
NB: Этот метод сохранит предыдущую историю восстановленного файла, однако, чтобы увидеть предыдущую историю в журнале TortoiseSVN, вам необходимо убедиться, что в диалоговом окне «Журнал сообщений» не установлен флажок «Останавливать при копировании / переименовании».
источник
svn cp -r 1993 http://example.com/svn/trunk/path@1993 http://example.com/svn/trunk/path
merge
, но я этого не понял.Для полноты, это то, что вы нашли бы в книге svn, если бы знали, что искать. Это то, что вы уже обнаружили:
Отмена изменений
Восстановление удаленных элементов
То же самое из более поздней (и подробной) версии книги:
Отмена изменений
Восстановление удаленных элементов
источник
Используйте функцию копирования Tortoise SVN, чтобы отменить зафиксированные изменения:
надеюсь, это поможет
источник
Кажется, я всегда использую svn copy в качестве операции на сервере, поэтому не уверен, работает ли он с двумя рабочими путями.
Вот пример восстановления удаленного файла в локальную рабочую копию проекта:
Находясь внутри каталога проекта. Это также работает для восстановления целых каталогов.
источник
Если вы используете Tortoise SVN, у вас должна быть возможность отменить изменения только из этой ревизии в вашу рабочую копию (эффективно выполняя обратное слияние), а затем выполнить еще одну фиксацию, чтобы повторно добавить файл. Следующие шаги:
источник
Самый простой способ восстановить файлы и не потерять историю ревизий - это использовать копию SVN , приведенный выше пример слияния мне кажется более сложным способом добиться того же. Зачем нужно слияние, если вы просто хотите восстановить ревизию?
В этом случае я использую следующее, и оно работает довольно хорошо.
Кажется, я всегда использую
svn copy
как серверную операцию, поэтому не уверен, работает ли она с двумя рабочими путями.источник
С Tortoise SVN :
источник
У вас должна быть возможность просто проверить один файл, который вы хотите восстановить. Попробуйте что-нибудь вроде
svn co svn://your_repos/path/to/file/you/want/to/restore@rev
гдеrev
находится последняя ревизия, в которой существовал файл.Некоторое время назад мне приходилось делать именно это, и, если я правильно помню, использование
-r
опцииsvn
не сработало; Пришлось использовать:rev
синтаксис. (Хотя, возможно, я вспомнил это задом наперед ...)источник