Ручные шаги с простыми командами git
План состоит в том, чтобы разделить отдельные каталоги на собственные репозитории, а затем объединить их. В следующих шагах вручную не использовались скрипты, предназначенные для использования, но были понятные команды, и они могли помочь объединить дополнительные N подпапок в другой репозиторий.
Делить
Давайте предположим, что ваш оригинальный репо: original_repo
1 - Разделить приложения:
git clone original_repo apps-repo
cd apps-repo
git filter-branch --prune-empty --subdirectory-filter apps master
2 - Сплит либс
git clone original_repo libs-repo
cd libs-repo
git filter-branch --prune-empty --subdirectory-filter libs master
Продолжить, если у вас более 2 папок. Теперь у вас будет два новых и временных git-хранилища.
Покори , объединяя приложения и библиотеки
3 - Подготовьте новый репо:
mkdir my-desired-repo
cd my-desired-repo
git init
И вам нужно будет сделать хотя бы один коммит. Если следующие три строки должны быть пропущены, ваш первый репо появится сразу под корнем репо:
touch a_file_and_make_a_commit # see user's feedback
git add a_file_and_make_a_commit
git commit -am "at least one commit is needed for it to work"
При фиксированном временном файле mergeкоманда в следующем разделе остановится, как и ожидалось.
Принимая во внимание обратную связь с пользователем, вместо добавления случайного файла, такого как a_file_and_make_a_commit, вы можете добавить или .gitignore, и README.mdт. Д.
4 - Слияние приложений репо первым:
git remote add apps-repo ../apps-repo
git fetch apps-repo
git merge -s ours --no-commit apps-repo/master # see below note.
git read-tree --prefix=apps -u apps-repo/master
git commit -m "import apps"
Теперь вы должны увидеть каталог приложений внутри вашего нового хранилища. git logдолжен показывать все соответствующие исторические сообщения коммита.
Примечание: как отметил Крис ниже в комментариях, для более новой версии (> = 2.9) git необходимо указать --allow-unrelated-historiesс помощьюgit merge
5 - Объединить libs repo следующим образом:
git remote add libs-repo ../libs-repo
git fetch libs-repo
git merge -s ours --no-commit libs-repo/master # see above note.
git read-tree --prefix=libs -u libs-repo/master
git commit -m "import libs"
Продолжайте, если у вас есть более 2 репо для слияния.
Ссылка: объединить подкаталог другого репозитория с git