Ввести слияния в привитую историю Git
В настоящее время я импортирую SVN-репозиторий в Git. Структура SVN-репозитория немного запутана, поэтому мне приходится конвертировать его в три отдельных Git-репозитория, а затем объединять их все вместе.
Если бы это был простой проект с тремя частями в одной истории, то я мог бы просто переназначить их поверх другой, например:
cd part3
git remote add -f part1 url_to_part1
git remote add -f part2 url_to_part2
git rebase part2/master
git rebase part1/master
тем не мение part3
в моем примере выше содержатся десятки тегов и три ветви. Если части 1 и 2 были аккуратно объединены в master
(ну, ствол) внутри SVN, тогда я бы сделал что-то подобное, чтобы правильно перенести ветку в историю. Преимущество заключается в том, что все теги остаются на месте, в отличие от перебазирования.
Но у одной из ветвей есть осиротевший коммит, который мы сейчас хотели бы слить в историю. Теперь, если я попытаюсь исправить историю с помощью взяточничества, изменения от осиротевшего коммита будут потеряны. В приведенном ниже примере слияние X с C произошло в SVN, и поэтому я могу создать ссылку с трансплантатом. Но я хочу объединить осиротевший коммит O между C и D, сохранив теги коммитов E, G и т. Д.
A-B-C-[ ]-D-E-F-G-H-...
\ / /
X--O
Есть ли способ, которым я могу указать структуру графа, используя что-то вроде файла графтов, но затем фактически выполнить подразумеваемые слияния? Или есть команда filter-branch, которую я должен использовать здесь?
1 ответ
git-svn
не подходит для одноразовых конверсий репозиториев. Это отличный инструмент, если вы хотите использовать Git в качестве внешнего интерфейса для существующего сервера SVN, но для одноразовых преобразований не следует использовать git-svn
, но svn2git
который гораздо больше подходит для этого варианта использования.
Есть инструменты под названием svn2git
Вероятно, лучшим из них является KDE из https://github.com/svn-all-fast-export/svn2git. Я настоятельно рекомендую использовать это svn2git
инструмент. Это лучшее, что я знаю из доступных, и оно очень гибкое в том, что вы можете делать с его файлами правил.
Если вы не на 100% об истории вашего хранилища, svneverever
http://blog.hartwork.org/?p=763 - отличный инструмент для изучения истории SVN-репозитория при его миграции на Git.
Вы сможете написать файл правил таким образом, чтобы преобразовать весь свой SVN-репозиторий за один очень эффективный прогон в правильный Git-репозиторий.