Я планирую svn для мерзкого переноса нескольких репозиториев. Два из них находятся в определенном состоянии.
Проект был разработан в SVN-репо. Из-за различных ограничений проект в какой-то момент был разветвлен. Форк был сделан путем дублирования репозитория SVN. После этого два проекта развивались отдельно. Никаких веток или тегов в репо не существует, кроме ствола.
Значительная функциональность была разработана для исходного проекта и должна быть перенесена на развилку. В текущей ситуации это можно сделать, создав патч из различных ревизий и применив его к разветвленному проекту. Это имеет преимущество кратковременной простоты в текущей ситуации, но имеет ряд громоздких последствий в долгосрочной перспективе.
Мы могли бы иметь два разных репозитория git и выполнять кросс-форк-портирование через запросы на извлечение, но этого может не хватить удобства (мы не используем github). Кроме того, может наступить время, когда мы захотим реинтегрировать форк в родительский проект благодаря рефакторингу модульной конструкции. Другой подход заключается в объединении двух репозиториев SVN в один репозиторий git в виде отдельных веток и управлении последующим слиянием оттуда (со всеми преимуществами, которые оно дает).
В идеале я бы хотел воссоздать истинную историю проекта, то есть иметь git-репо с:
- одна ветвь, состоящая из коммитов до форка
- две разные ветви, состоящие из родительского и ветвления коммитов до HEAD
Интересный факт, который может помочь, следующая команда создает идентичные SHA1 для общих коммитов:
git svn clone -s -A svn.authors --no-metadata http://subversion.foo.local/repo/path git_migration
Меня не волнует --no-metadata
, потому что это односторонняя миграция.
Как мне достичь такого результата, если вообще возможно?