восстановление репозитория svn

Мне нужно было объединить один репозиторий ветки с другим, и вместо этого я по ошибке использовал «копию svn», которая перезаписала репозиторий назначения, и поэтому некоторые файлы были потеряны. Хорошей новостью является то, что у меня есть ежедневные резервные копии, созданные с помощью `svnadmin dump', но я не уверен, как лучше поступить, чтобы восстановить эти потерянные файлы, а также сохранить новые, которые были добавлены позже.

Я думал сделать так:

  1. создать временный репозиторий svn
  2. use "svn load /path/to/the/temp-repository/
  3. cd /path/to/the/temp-repository/
  4. рекурсивно удалить все каталоги .svn
  5. перейдите в ветку, которую я перезаписал, и используйте rsync для отправки потерянных файлов в рабочий репозиторий.

Не уверен, что это лучший подход. Есть предположения ?


person cparfon    schedule 08.11.2012    source источник


Ответы (1)


У меня есть для вас хорошие новости

Subversion хранит всю историю между изменениями.

Когда вы случайно svn copy добавили дополнительную фиксацию в ветку назначения. Ты сможешь

  • svn up GOODREV в хороший коммит (или svn co BRANCH@GOODREV в новый WC) и коммит (незначительное редактирование-сохранение-фиксация) поверх плохого
  • Отменить неверный коммит с помощью обратного слияния

Для дампа svnadmin

Вы должны определить, являются ли эти резервные копии инкрементными (--incremental) или полными. В случае полного необходимо найти бэкап, в котором есть GOODREV, svnadmin load этот дамп в новый репозиторий, svn copy из ветки NEW-REPO в ветку OLD-REPO, убить восстановленный репозиторий

Подсказка: вам нужно лучше изучить администрирование репозитория: стр. 4-5 просто бред - репозиторий SVN имеет совершенно другое файловое дерево, а поддерево репозитория не существует как физическое дерево той же структуры (и файлы .svn являются атрибутом рабочей копии и хранение WC-метаданных)

Логичное и лучшее (чем ваше) использование svndump, опять же, отличается. Если вы все еще хотите скрыть свою ошибку от глаз, у вас есть

  • Создайте новый полный дамп для диапазона ревизий (параметр -r LOWER:UPPER), который исключит BADREVISION.
  • Отключить все соединения
  • Удалить старый репозиторий (rm REPODIR + mkdir REPODIR)
  • Восстановить репо из дампа
person Lazy Badger    schedule 08.11.2012
comment
Хм. Я все еще в замешательстве. На самом деле, прежде чем использовать svn copy, я использовал svn del, чтобы сначала удалить эту ветку, а затем скопировать svn из другой ветки. Можно ли еще восстановить? - person cparfon; 08.11.2012
comment
Как насчет файлов, которые были добавлены позже в эту ветку? - person cparfon; 08.11.2012