2008-12-12 3 views
1

Сегодня днем, заметив сломанную сборку и тот факт, что некоторые файлы выглядели как очень старые версии (около 2 недель), я проверил журнал svn. Видимо, только сегодня днем ​​один из разработчиков сделал «svn copy» из каталога из старой версии в тот же каталог. Таким образом, кажется, что последняя версия «i.e. head» всех файлов в этом каталоге действительно старая, и вся история «i.e. log» еще старше.Восстановление после неудачной «svn copy»

Однако, я думаю, что я могу восстановиться, используя другую копию «svn» (т. Е. Болезнь - это лекарство). То, что я подумываю делать это найти ревизию, в которой была сделана плохо «SVN копия» (скажем, число оборотов 1234), вычитание 1 (1233) и делают:

svn copy -r 1233 file://path/to/messed/up/dir file://path/to/messed/up/dir 

Это должен восстановить последнюю версию, а также как вернуть всю мою историю. Правильно ли я об этом?

ответ

7

Согласно the SVN book,

svn merge -c -1234 

должен сделать трюк.

Об этом в книге есть целый section.

подробное объяснение: -c -1234 переводится в -r 1234:1233, который возвращается переходом от ревизии 1234.

-2

Возможно, сначала сделайте резервную копию.

На самом деле, мне остается задаться вопросом, почему у вас нет ежедневной резервной копии, которую вы можете просто восстановить уже ... Ваш репозиторий SVN, безусловно, достаточно важен для этого?

+0

В теории, само хранилище SVN является резервным для таких вещей. Резервное копирование самого хранилища должно происходить только из-за «внешних» бедствий (аппаратное обеспечение, rm -rf *, наводнения и т. Д.). – 2008-12-12 15:19:17

1

Эта команда копирования не работает по двум причинам:

  1. как уже существует целевой каталог, СВН обрабатывает запрос копирование, копирование в целевой каталог; вы не можете перезаписать cp. Таким образом, это создаст файл/dir/dir. Когда была создана версия dir для версии HEAD, сначала должна была быть операция удаления.
  2. это запрос на копирование версии 1233 объекта HEAD вверх/dir.However, объект dir в HEAD не имел ревизии 1233; объект с таким же путем, который имел такую ​​ревизию, был удален.

Чтобы это исправить, нужно

  1. удалить текущий объект реж:

    svn rm file:///path/to/messed/up/dir 
    
  2. Копирование с использованием "Peg пересмотров"

    svn cp file:///path/to/messed/up/[email protected] file:///path/to/messed/up 
    
Смежные вопросы