Pull to refresh

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

Reading time2 min
Views3.5K
Когда то давно в одной из контор был один репозиторий на все проекты.

svn svn://server/
some1
some2
some3


в принципе, это было довольно удобно, тк все хранится в одной базе.

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



Для начала нужно было найти все точки разрыва, если они есть.

найдем первый разрыв:
svnadmin dump --incremental -r0:HEAD c:\path\to\repo > test.dmp
В моем случае из 8600 ревизий, первый нашелся быстро… 2300ая ревизия.

Далее найдем еще точки:
svnadmin dump --incremental -r2301:HEAD c:\path\to\repo > test.dmp

получили еще одну. 3459.

и еще найдем.
svnadmin dump --incremental -r3460:HEAD c:\path\to\repo > test.dmp

больше ошибок не нашлось.

Теперь делаем дампы живых ревизий.
svnadmin dump --incremental -r0:2299 c:\path\to\repo > dump(0-2299).dmp
svnadmin dump --incremental -r2301:3458 c:\path\to\repo > dump(2301-3458).dmp
svnadmin dump --incremental -r3460:HEAD c:\path\to\repo > dump(3460-HEAD).dmp


Теперь делаем деление репозиториев на проекты.

проект 1:
svndumpfilter include /some < dump(0-2299).dmp > some-1.dmp
svndumpfilter include /some < dump(2301-3458).dmp > some-2.dmp
svndumpfilter include /some < dump(2301-3458).dmp > some-3.dmp


проект 2:
svndumpfilter include /some2 < dump(0-2299).dmp > some2-1.dmp
svndumpfilter include /some2 < dump(2301-3458).dmp > some2-2.dmp
svndumpfilter include /some2 < dump(2301-3458).dmp > some2-3.dmp


по аналогии и третий так же.

далее создаем репозиторий для первого проекта:
svnadmin create c:\path\to\some

и выгружаем дампы:
svnadmin load c:\path\to\some < some-1.dmp
svnadmin load c:\path\to\some < some-2.dmp
svnadmin load c:\path\to\some < some-3.dmp


и здесь могут объявится ошибки типа:
1. файл уже есть
2. как это не пародоксально — файла нет.

в первом случае все просто — заходим в репозиторий, например, «черепахой» и удаляеем этот мешающий файл.

во втором случае придется делать отсев в дампах
svndumpfilter exclude /chto/ne/nawlos < some-1.dmp > some-11.dmp

и потом его выгружать в репозиторий.

Вот в общем то и все.
Tags:
Hubs:
Total votes 8: ↑8 and ↓0+8
Comments4

Articles