С нами случилось, что мы создали 2 репозитория для 2 проектов, которые были настолько связаны, что не было никакого смысла их разделять, поэтому мы объединили их.
Я покажу, как сначала объединить основные ветви в каждой, а затем объясню, как вы можете распространить это на все полученные ветки, надеюсь, это поможет вам.
Если у вас есть работающий субмодуль, и вы хотите преобразовать его в каталог на месте, вы можете сделать:
git clone project_uri project_name
Здесь мы делаем чистый клон на работу. Для этого процесса вам не нужно инициализировать или обновлять подмодули, поэтому просто пропустите его.
cd project_name
vim .gitmodules
Отредактируйте .gitmodules
в своем любимом редакторе (или Vim), чтобы удалить подмодуль, который вы планируете заменить. Строки, которые нужно удалить, должны выглядеть примерно так:
[submodule "lib/asi-http-request"]
path = lib/asi-http-request
url = https://github.com/pokeb/asi-http-request.git
После сохранения файла,
git rm --cached directory_of_submodule
git commit -am "Removed submodule_name as submodule"
rm -rf directory_of_submodule
Здесь мы полностью удаляем отношение субмодулей, чтобы мы могли создать и перенести другое репо в проект на месте.
git remote add -f submodule_origin submodule_uri
git fetch submodel_origin/master
Здесь мы выбираем хранилище подмодулей для слияния.
git merge -s ours --no-commit submodule_origin/master
Здесь мы начинаем операцию слияния двух репозиториев, но останавливаемся перед фиксацией.
git read-tree --prefix=directory_of_submodule/ -u submodule_origin/master
Здесь мы отправляем содержимое мастера в подмодуле в каталог, в котором он находился до добавления префикса имени каталога
git commit -am "submodule_name is now part of main project"
Здесь мы завершаем процедуру, делая фиксацию изменений в слиянии.
После этого вы можете нажать и начать заново с любой другой ветки для слияния, просто извлеките ветку в вашем хранилище, которая получит изменения, и измените ветку, которую вы вносите в операции слияния и дерева чтения.