Объединить клон репозитория git svn с другим репозиторием git

В течение многих лет моя команда использует SVN. Несколько месяцев назад мы перешли на Git, просто отправив ветку SVN без истории, и продолжили разработку на Git. Сегодня нам нужно вернуть историю SVN до того, как она будет потеряна. Поэтому я использовал git svn clone, чтобы превратить SVN в Git.

Таким образом, я получаю проект SVN, эквивалентный проекту Git (proj_with_history) и проекту Git, имеющему ту же начальную фиксацию, что и последняя фиксация одной из ветвей (proj_without_history) proj_with_history.

Вопрос в том, как связать/объединить proj_with_history с proj_without_history, зная, что в proj_without_history были созданы новые ветки и теги?

Если возможно, мы хотели бы сделать эту миграцию прозрачной в графе коммитов, даже если история будет переписана, но при этом избежать конфликтов.

  • proj_with_history : ... - f30ab - 98ca9
  • проект_без_истории : 34ac2 - h20a5 - ...
  • 98ca9 и 34ac2 имеют одинаковый код

51
1

Ответ:

Решено

Загрузите клон svn в репозиторий с вашей историей git, привяжите корень этой истории git к преобразованному коммиту svn, из которого было получено его содержимое (git replace --graft $theroot $theoriginaltip), проверьте результат локально, затем запеките прививку с помощью git filter-branch, грубой силы версия just-do-it — это git filter-branch -- --all --tag-name-filter cat полностью отказаться от старой истории и заменить ее новыми подсказками с расширенной историей.