Ручные шаги с простыми командами git
План состоит в том, чтобы разделить отдельные каталоги на свои собственные репозитории, а затем объединить их. В следующих шагах вручную не использовались скрипты, предназначенные для использования, но были понятные команды, и они могли помочь объединить дополнительные N подпапок в другой репозиторий.
Разделить
Предположим, ваш исходный репо: original_repo
1 - Сплит-приложения:
git clone original_repo apps-repo
cd apps-repo
git filter-branch --prune-empty --subdirectory-filter apps master
2 - Сплит libs
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"
Теперь вы должны увидеть каталог 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