Как исправить поврежденную историю Git после перехода с Subversion? - PullRequest
1 голос
/ 16 ноября 2011

Я перенес хранилище Subversion моего проекта в Git, в соответствии с Как перенести SVN с историей в новый репозиторий Git . Он работал очень хорошо, за исключением того, что есть одна отключенная ветка из-за неправильного использования Subversion в нашей истории. Я не уверен, что терминология, чтобы описать состояние этой ветви. Вот как это выглядит:

trunk: ...-A1--->        <---A3----A4-...

beta:         B1--B2--B3--B4----B5

Из того, что я могу сказать, это то, что произошло. В ревизии B1 была создана новая "бета" ветвь с использованием cp вместо svn cp . При версиях B4 и A3 весь репозиторий был перемещен из / svnroot / project / orig в / svnroot / project (я не Не думаю, что это связано с проблемой, но я упоминаю об этом на всякий случай). В A4 ветвь "бета" была объединена обратно в транк с помощью команд mv и rm вместо svn merge .

Как я могу исправить историю Git-репозитория так, чтобы B1 правильно разветвлялся из A1 и B5 сливался обратно в A4 ? Обратите внимание, что в "бета" ветке на самом деле 75 ревизий.

Ответы [ 2 ]

2 голосов
/ 17 ноября 2011

Вы можете использовать трансплантаты для создания поддельной информации о предках.Создайте файл .git/info/grafts и вставьте в него что-то вроде этого:

B1 A1
A4 A3 B5

Но вместо имен коммитов из вашей схемы, поместите их полные SHA1.После этого убедитесь, что история выглядит так, как вы этого хотите.Если это так, вы можете сделать трансплантаты постоянными: git filter-branch --all.

Конечно, это переписывает историю, и это плохая идея, если у кого-то еще есть клон вашего git-репо.

0 голосов
/ 17 ноября 2011

git checkout beta - взять ветку.

git rebase A1 - переместить коммиты бета поверх A1.

git checkout A4 - переключиться на А4

git checkout -b new_merge_point - создать временную ветвь для объединения

git merge beta - объединение. Могут ли быть конфликты?!.

git checkout trunk - обратно в багажник

git rebase new_merge_point повторно применить коммиты после А4 к новой точке слияния.

...