В настоящее время я импортирую репозиторий SVN в Git. Структура репозитория SVN немного беспорядочна, поэтому мне нужно преобразовать его в три отдельных хранилища Git, а затем объединить их все вместе.Внести слияния в прививку История 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, то я бы сделал что-то вроде this, чтобы правильно перевести ветку в историю. Это имеет то преимущество, что все теги остаются на месте, в отличие от rebase.
Но у одной из ветвей есть осиротевшая фиксация, которую мы теперь хотели бы объединить в историю. Теперь, если я попытаюсь исправить историю с помощью трансплантата, изменения от сиротского фиксации будут потеряны. В приведенном ниже примере слияние X-C произошло в SVN, и поэтому я могу создать ссылку с трансплантатом. Но я хочу, чтобы объединить осиротевший совершить O между C и D, сохраняя при этом метки на коммитах E, G и т.д.
A-B-C-[ ]-D-E-F-G-H-...
\//
X--O
Есть ли способ, что я могу указать структуру графа, используя что-то вроде файла трансплантатов но затем фактически выполнить подразумеваемые слияния? Или есть команда filter-branch, которую я должен использовать здесь?
[примечание по этому вопросу] (http://stackoverflow.com/questions/3810348/setting-git-parent-pointer-to-a-different-parent/3811028#3811028) предполагает, что это невозможно с помощью трансплантаты. Угадайте, что мне придется переустановить, а затем вручную переместить теги. – jkeirstead