Слияние репозитория git svn clone с другим репозиторием git

#git #svn #git-svn

#git #svn #git-svn

Вопрос:

В течение многих лет моя команда использовала 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
  • proj_without_history : 34ac2 — h20a5 — …
  • 98ca9 и 34ac2 имеют одинаковый код

Комментарии:

1. Что такое «proj_without_history»?

2. Ветка, которую они запустили без истории svn. Просто один коммит с последним содержимым из ветки svn, а затем начал работать над git.

Ответ №1:

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

Комментарии:

1. Теперь мне нужно кое-что узнать. Отличный совет!