
Итак... мы потеряли наш SVN-репозиторий. По несчастливым обстоятельствам у нас также нет жизнеспособной резервной копии.
Что делать? Просто сделать "svn export" от кого-то с последним обновлением и начать заново? Есть ли способ восстановить историю? Или подключить наши локальные checkouts к новому серверу?
решение1
Если у вас есть только касса, у вас есть снимок кода, но нет истории.
Вы можете создать новый репозиторий из этого. Что касается подключения существующих чекаутов к новому репозиторию после его настройки, то это, вероятно, больше проблем, чем пользы. Будет проще создать новый репозиторий из самого старого чекаута, а затем зафиксировать изменения из более новых чекаутов как обновления.
Что касается восстановления истории, я не вижу, как это возможно без дампа репо (через svnadmin dump) в какой-то момент времени. Даже старый дамп даст вам всю историю, которая была с момента создания репо до того, где был сделан дамп.
Может быть, кто-то использовал git-svn в вашем репозитории в какой-то момент? Это могло сохранить некоторую историю, но вернуть ее в новый репозиторий Subversion может быть непросто.
Восстановление данных стоит дорого, но это также может быть вариантом, если устройство хранения, на котором находился ваш репозиторий, не было физически уничтожено или деструктивно перезаписано (и это не был SSD).
решение2
Если вы действительно потеряли свой репозиторий, без резервных копий, то да - он пропал. Нет никакой магии, которая может восстановить действительно потерянные данные.
Итак, если у вас есть рабочая копия от кого-то, вы можете создать новый репозиторий и добавить файлы в него. Вы потеряете всю историю (очевидно), но история уже потеряна.
Вы можете отправить жесткий диск в компанию по восстановлению, чтобы попытаться восстановить какие-либо данные. Как только у вас будет репозиторий (или хотя бы каталоги db/revs и db/revprops), вы можете заново создать репозиторий из них (скопировав их в каталог нового репозитория). Если окажется, что у вас нет всей базы данных, то все будет немного сложнее, но восстановить остальные данные все равно возможно — вам, возможно, придется отправить все это в collabnet и получить от них некоторую поддержку, чтобы восстановить искореженные файлы данных в новом рабочем репозитории.
Теперь вы говорите "svn export" от кого-то с самым последним обновлением.... это предполагает, что у человека есть резервная копия, из которой вы можете экспортировать. Это так, или вы перепутали это с рабочей копией?
решение3
Как говорит Марк выше, если у вас нет дампа репозитория (с сервера), вы не можете построить историю. Извлечение SVN содержит только подсказку о том, где оно было извлечено. Извините, вы SOL. Думаю, именно поэтому людям нравится распределенный контроль исходников. В нашей компании я настроил его на отправку svn diffs на amazon s3 дважды в день.
решение4
Во-первых: отсутствие резервной копии SVN-Repo — это боль, и это никогда не должно случаться. Но то же самое произошло со мной. Я снова начал добавлять тысячи файлов, файл за файлом, потому что я не хочу проверять временные или другие файлы без исходного кода.
Почти вся история утеряна. Ноне последнее состояние регистрации потеряно! Мне удалось получить последнее состояние регистрации, поэтому новый репозиторий был похож на старый, и я также получил последнее различие!
Вот мой рецепт:
- резервное копирование вашей локальной кассы
- очистите свою местную кассу см.:снимок экрана svn-cleanup_to_last_state
- создать новый репозиторий
- извлечь новый репозиторий в новую пустую папку
- скопировать старую очищенную копию в новую папку
- просто добавьте все файлы
- совершить это
- перезапишите новую папку извлечения резервной копией из пункта 1.
теперь у вас есть все файлы, как и прежде, с последними изменениями, и только файлы имеют версии, как и прежде.