Как рекомбинировать несколько репо git в одно репо и сохранить историю? - PullRequest
1 голос
/ 06 августа 2020

Раньше у нашей команды был весь наш код в одном репозитории. Мы разбиваем наш код на несколько репозиториев. Поработав некоторое время с несколькими репозиториями, мы хотим вернуться к одному репозиторию.

Когда код был разделен на несколько репозиториев, история git не была перемещена. Старое единое репо все еще существует, но никто не вносит в него изменений.

Есть ли способ объединить несколько репо в единое репо и объединить историю в старом едином репо с историями в новом репо.

Было бы неплохо иметь возможность использовать git log или git blame в файле и видеть изменения из старого единого репо и более новых множества репозиториев.

Единое репо имел такую ​​структуру:

monorepo
-moduleA
-moduleB
-moduleC

Это новые репозитории: moduleA moduleB moduleC

1 Ответ

1 голос
/ 06 августа 2020

Если каталоги сохранили свои имена, вы можете переустановить все эти ветки.

Итак ... давайте создадим локальное репо, которое имеет доступ к 4 пультам. old, new1, new2 и new3. У каждого есть одна ветвь main и при условии , что каталоги, содержащиеся внутри каждой ветки, все еще отображаются правильно (файлы не были перемещены), а первая ревизия из каждого из new repos/main точно такая же, как последняя ревизия в old/main, тогда вы можете переставить ветки с новых пультов поверх старого.

Итак .... возьмите new1.

git rebase --onto old/main revision-id-of-first-revision-of-new1-main new1/main
# at this point you should be in DETACHED HEAD, let's create a local branch
git branch main1

Сделайте то же самое для new2 и 3. Теперь у вас должно быть 3 ветки с именами main1, main2 и main3.

Объедините их в одну ветку .... если вам нравится результат, тогда pu sh эта ветка как old/main

git push old HEAD:main
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...