Ручные шаги с помощью простых команд 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"
Теперь вы должны увидеть каталог apps внутри вашего нового репозитория. git log
должен отображать все соответствующие исторические сообщения коммитов.
Примечание: как Крис отметил ниже в комментариях, для более новой версии (>= 2.9) git вам нужно указать --allow-unrelated-histories
с git merge
5 - Объедините репозиторий libs таким же образом:
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
person
chfw
schedule
17.02.2017