Ввести слияния в привитую историю 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-репозиторий.

Другие вопросы по тегам