2015-07-28 2 views
0

Я пытаюсь преобразовать SVN-репозиторий в git. Репозиторий состоит из боя 17000, поэтому я использую KDE svn2git (aka svn-all-fast-export).svn2git migration: анализ структуры кодового дерева

Моя проблема заключается в том, что хранилище был реорганизован несколько раз (первый он был преобразован из CVS, vendor -branches были переименованы, ...)

Потребовалось некоторое время, пока проект не перешел на /trunk , /branches & /tag макет, но тогда проект имеет большое количество подмодулей, и они организованы, например,

/trunk/plugins/foo 
/trunk/plugins/bar 
/branches/plugins/foo/1.0 
/branches/plugins/foo/1.1 
/branches/plugins/bar/1.0 
/tags/plugins/pizzapack/3.14/foo 
/tags/plugins/pizzapack/3.14/foo 

Из всех этих подмодулей все также имеют подкаталоги.

Структура каталогов в /метки и /филиалов может измениться с течением времени, и, конечно, не очень последовательны.

Теперь хорошей новостью является то, что svn2git позволяет мне справиться со всем этим.

Плохая новость заключается в том, что мне нужен обзор эволюции структуры каталога/ветвления, прежде чем я могу начать инструктаж svn2git.

Итак, я ищу способ анализа структурных изменений структуры файловой системы с течением времени: дополнение, удаление, копирование и перемещение каталогов.

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

Что вы придумали, что вы используете при решении такого проекта?

ответ

1

Вы можете попробовать SubGit версии 3.0.0 или более поздней, чтобы обнаружить структуру вашего хранилища.

$ subgit configure --svn-url <projectURL> --layout auto --trunk trunk repo.git 

где --trunk опция определяет относительный путь от каталога, который играет роль ствола в последней редакции (без ведущих или слеш, например --trunk path/to/trunk или --trunk trunk, если в последней версии вашего хранилища классического багажник/branch/tags, это должно быть только --trunk trunk). Эта команда сканирует историю вашего репозитория, отслеживает все перемещения, копии и переименовывает указанную директорию соединительной линии и генерирует каталог repo.git с файлом subgit/config, в котором отражается структура вашего хранилища в вариантах trunk/branches/tags/shelves. Обратите внимание, что команда не обнаруживает автоматически ветви, которые были добавлены неправильно с помощью только «svn add», но не с «svn cp»/«svn mv».

Вы можете начать перевод с SubGit:

$ subgit install repo.git 

Или вы можете попробовать скопировать и вставить ствол/филиалы/варианты тегов, сгенерированные для вашего мерзавца-СВН/svn2git файла конфигурации.Я не уверен, что второй подход будет работать в 100% случаев, но для более или менее простых структур репозитория это будет работать, поскольку генерируемые параметры имеют тот же формат, что и соответствующие параметры git-svn.

Отказ от ответственности: Я один из разработчиков SubGit. SubGit - это коммерческий инструмент, но он бесплатный для однократного преобразования (импорт).

Смежные вопросы