Дамп хранилища Subversion по одной ревизии за раз
У нас есть большой гигантский небрежный репозиторий Subversion, содержащий более 60 проектов. trunk
, branches
, а также tags
каталоги находятся в корне хранилища. Некоторые ветки сделаны branches/project/branchName
, Другие сделаны branches/BranchName/project
, Там много беспорядка.
Есть почти 200 000 ревизий, 22Gb и более 60 проектов.
Я хочу реструктурировать репозиторий, чтобы у каждого проекта был свой репозиторий и была установлена стандартная стратегия ветвления. Вывод всего хранилища занимает от 7 до 8 часов, а затем отфильтровывать то, что я хочу, - очень долгий процесс, так как мне нужно запустить svndumpfilter
многократно.
Я думаю о новой стратегии. Если я посмотрю на ревизии, вовлеченные в один проект, мы можем говорить о 400 ревизиях. Я знаю, что могу бежать svnadmin dump
по ряду ревизий. Что если я выброшу только те версии проекта, которые меня интересуют? я могу бежать svnadmin dump
за каждую ревизию. Я думаю, что это на самом деле может быть быстрее. Однако как это повлияет на загрузку в новый репозиторий?
Есть ли проблема простого сброса только тех ревизий, которые я хочу?
1 ответ
Первая проблема, которая приходит мне в голову, заключается в том, что вы не сможете загрузить свои новые дампы прямо в новые репозитории, поскольку в этих дампах будут отсутствовать узлы для создания родительских папок (trunk / branch / tags, что угодно) и svnadmin load
команда потерпит неудачу с File not found
ошибка. Так что вам придется их создавать заранее, вот так: svn mkdir http://server/svn/ProjectX/Trunk -m "Created Trunk"
Во-вторых, могут возникнуть другие проблемы, если в коммитах вашего проекта есть перекрестные ссылки. Например, вы сбрасываете ревизии от 1000 до 1500 за /branches/ProjectX/branch
, но какой-то узел в дампе будет содержать Node-copyfrom-rev: 800
а также Node-copyfrom-path: /branches/ProjectY/branch
заголовки, потому что разработчик просто хотел получить общий файл из этого проекта и использовал svn copy
команда. И тут начнется фильтрующее безумие. Чтобы смягчить это, вы можете попытаться обработать эти дампы с помощью скрипта svndumpfilterIN, который извлечет для вас недостающие файлы из репозитория Live с помощью svnlook
, Но учтите, что у него есть свои ошибки (см. Мой ответ на этот вопрос: SVNDumpFilter меняет пути перед их добавлением?).
Третья мысль: если вам нужны отдельные репозитории для каждого проекта, вы, вероятно, также захотите переместить сбрасываемые проекты в корневую папку, и именно здесь все становится очень грязно. Например, почти ни один из известных мне инструментов, способных переместить путь в дампах, таких как Svn-DumpReloc, svndumpsanitizer (не уверен насчет svndumptool with hack merge) svn:mergeinfo
свойства, и это приведет к сбою импорта дампа.
Поэтому, учитывая ваши ограничения, я не вижу решения, использующего частичные дампы, для которого не потребовалось бы ручного изменения репозиториев и файлов дампов впоследствии.