Задать вопрос
@fregate
Пишу, думаю

Как правильно слить воедино нескольких репозиториев в Git?

Был один моно-репозиторий, со следующей структурой, например
repo/
repo/packages/
repo/packages/pack1/
repo/packages/pack1/[src1, 2, 3, 4]
repo/packages/pack2/
repo/packages/pack2/[srcA, B, C, D]
repo/target/
repo/tests/


В процессе разработки переехали на другой сервис и переделали структуру, что часть каталогов стали подмодулями
repo/
repo/packages/ <---  submodule
repo/target/
repo/tests/

submodule/
submodule/pack1/
submodule/pack1/[src1, 2, 3, 4]
submodule/pack2/
submodule/pack2/[srcA, B, C, D]


Но часть изменений осталась в старом репозитории и хотелось бы изменения принести в новый (получается подмодуль) с историей комитов.

Можно ли такое сделать?

Попытался сделать по простому через добавление remote в основной репозиторий и чекаута из него - не получается, ошибка c кучей файлов
error: The following untracked working tree files would be overwritten by checkout:


$ cd new/repo
$ git remote add origin oldserver git@git-old.service:monorepo.git
$ git checkout oldserver/my-branch


Или только cherry-pick?
  • Вопрос задан
  • 452 просмотра
Подписаться 2 Сложный 2 комментария
Решения вопроса 2
Vapaamies
@Vapaamies
Психанул и снес свои ответы не отмечающим решения…
При помощи git-filter-repo можно растащить единую историю на историю подмодулей, будто с самого начала на подмодулях было. Придется повозиться, конечно, но оно стоит того, как по мне.
Ответ написан
Комментировать
sergey-kuznetsov
@sergey-kuznetsov Куратор тега Git
Автоматизатор
Вы перепутали команду. Слияние делается не через Checkout, а через Merge. И предварительно, через filter-repo, нужно подчистить и реорганизовать тот репозиторий, откуда хотите сливать недостающее, чтобы оставить только нужное и в правильном каталоге.
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы