Git: merge 2 repos with history
Иногда возникает необходимость объединить вместе 2 GIT репозитории (https://github.com/divlv/bigmainrepo и https://github.com/divlv/secondrepo). Например, включить одну в другую.
Идеальный вариант, если во 2-й репозитории используется своя структура каталогов (специальный каталог), чтобы при слиянии не возникало никаких "пересечений" по именам.
В главной репозитории (bigmainrepo), куда будем "сливать" вторую (secondrepo), можно переключиться в специальный branch, например "dev", поместить 2-й репозиторий (со всей историей) туда и затем сделать merge в main.
Для того чтобы объединить два репозитория, необходимо, зайдя в локальный каталог (bigmainrepo) выполнить следующие действия:
Забрать всё, что нужно с сервера:
get fetch --all
Посмотрим в каком мы branch-e:
git branch
Если нужно, переключимся, например на "dev":
git checkout dev
Добавим ссылку на второй репозиторий:
git remote add -f second_repo https://github.com/divlv/secondrepo
На этом шаге у нас могут появиться ошибки, что второй репозиторий не найден.
Это может быть из-за отсутствия [credentials]
секции в конфиге второго проекта.
См. https://zaharov.info/git-enforce-username/
"Сольём" всё в один вместе с историей: (обратите внимание на ветку второго репозитория: main)
git merge --allow-unrelated-histories second_repo/main
На этом шаге сделает разрешить все конфликты (я не использовал здесь git merge --continue
) и всё готово к commit/push-у.
Commit, Push и - имеем данные из второго репозитория (secondrepo) со всей историей внутри главного (bigmainrepo).