SVN для мерзости миграции с вложенным SVN: внешние
Миграция из svn с svn externals, для мерзавца. У каждого svn externals может быть свой svn:externals. Там нет руководства, как перенести SVN с внешними для Git здесь, что я нашел полезным. Каждая ветка может иметь свои собственные ветви тегов. Какой лучший способ перенести весь репозиторий? Я смотрю на клон git svn основного репозитория, добавляющий подмодули git, а также каждый внешний клон. Но так как внешние элементы вложены, я не знаю, какое решение лучше. Скрипт используется до сих пор:
https://github.com/eneroth/git-externals
https://github.com/eneroth/git-externals
0 ответов
У меня есть собственное исследование, и я не нашел единого решения из открытого источника. Существует множество "односторонних" решений, которые не охватывают многие аспекты преобразования SVN-GIT, такие как:
svn:externals
svn:ignore
преобразование в.gitignore
- автоматическое преобразование или предотвращение отправки электронных писем автора SVN для продолжения без преобразования (например, GitLab использует почту учетной записи для отслеживания изменений репо (совокупной статистики участия) для учетной записи и будет отклонять отслеживание чего-либо, если вы забудете преобразовать почту из
author@<repo-guid>
послеgit-svn
орудие труда) - конвертация тегов / веток svn в собственные теги / ветки git
- обработка коллизий конверсии или недоступность конвертации
- обработка двухсторонних преобразований (git-2-svn)
- обработка возобновления преобразования (после фиксации в одном из репозиториев svn / git)
- работа с отсутствующим доступом к пустому репозиторию или без доступа к корню репозитория SVN
- обработка запуска / возобновления ручного преобразования (через скрипт или исполняемый файл) вместо автономной службы или наоборот
- поддержка преобразования из / в популярные SVN / GIT-концентраторы, такие как sourceforge, github, gitlab, bitbucket
...и так далее.
Это довольно большая область для исследования или исследования для себя, и она может занять много времени, чтобы хотя бы узнать, что вам действительно нужно или нужно от svn-to-git или любого другого преобразования.
Для себя я нашел это довольно близко к тому, что я хочу: https://techbase.kde.org/Projects/MoveToGit/UsingSvn2Git
Пример файла правил: https://cgit.kde.org/kde-ruleset.git/tree/kde-rules-main
Пример карты аккаунта: https://cgit.kde.org/kde-ruleset.git/tree/account-map
Примеры сценариев для упаковки / отправки из локального репозитория git (созданного с помощью инструмента KDE) в удаленный репозиторий git: https://phabricator.wikimedia.org/diffusion/OSOF/browse/master/svn2git/scripts
Сторонние проекты для сканирования репозитория SVN перед его нарезкой:
Некоторые из портов для других сторонних проектов:
- https://github.com/mazong1123/svn2gitnet (точечный сетевой порт инструмента ruby)
- http://rsvndump.sourceforge.net/ (например,
svnrdump
, но дополнительно разрешите дампы подкаталогов, даже если ваш доступ к репозиторию ограничен этим подкаталогом)
Некоторые отдельные интересные реализации:
- https://gitlab.com/esr/reposurgeon (сравнение с автором: http://www.catb.org/~esr/reposurgeon/features.html)
Но все же, есть много нерешенных аспектов или минусов, таких как:
- поддержка мерзавца
subtree
/submodules
/ etc, чтобы разделить репозиторий SVN на одно корневое репозиторий GIT со ссылками на другие небольшие репозитории GIT - автоматическое преобразование
svn:externals
git поддеревьям (правила из проекта KDE поддерживают только ручное или полуавтоматическое (регулярные выражения) преобразование)
Если вы решите использовать конвертер KDE, то вы можете написать скрипт для подготовки правил для каждого диапазона ревизий, для которого вы хотите перевести. svn:externals
в то, что вы хотите.