Я нашел ответы только о том, как использовать поддеревья git для разделения репозитория. Однако мне явно нужны подмодули.
Это проект Java maven. В настоящее время все находится в одном проекте maven и одном репозитории. Моя цель - добиться чего-то вроде этого:
Корневой репозиторий должен содержать основной pom.xml, системную документацию и т. д. Затем должно быть несколько подмодулей, один для служебной библиотеки, один для основного приложения и так далее. Подмодули - это их собственный проект maven, на который имеется ссылка из основного проекта maven в корневом репозитории. Корневой репозиторий не будет содержать исходного кода.
Я мог бы создать все новое из текущей HEAD, но для меня важно, чтобы история коммитов сохранялась как можно более полной.




I only found answers on how to use git subtrees to split up a repository. However, I explicitly want submodules.
Это именно то, что тебе нужно сделать. Разделите «основную» на ветки с помощью git subtree split <path> -b <branch>, а затем добавьте удаленный для каждого подмодуля и отправьте ветвь на удаленный.
# split the "main repo"
git subtree split -P path -b <branch1>
# For each branch that you extract
# add remote for branch 1
git remote add submodule1 <url>
# push the submodule
git push submodule1 <branch>
После того, как вы настроили все свои подмодули, добавьте их в «основное» репо.
# add the submodules
git submodule add <url>
# and once all your submodules are added commit the .gitmodules file
Это мне нужен git submodule add ... ... это способ "добавить" ваш подмодуль в ваш oroject, код выше показывает вам, как их создавать
Что такое url? Я знаю один URL-адрес моего удаленного репозитория git. Так что я должен создать конкретный URL-адрес для каждого модуля, который еще не существует ???
Ага. Точнее, url на каждый подмодуль
Хорошо, спасибо, это то, что я не понял, мне сначала нужно создать удаленные репозитории на сервере git
Конечно. Создайте репо для каждого модуля, а затем добавьте его в gi
# split the "main repo"
git subtree split -P path -b <branch>
# Create your repository, and get git url
# add remote for branch
git remote add submodule <url>
# push the submodule
git push -u submodule <branch>:master
# remove path
git rm -r path
# Stage and commit changes
git add -A
git commit -m 'Remove <path> for submodule replacement'
# add the submodule
git submodule add <url> <path>
# and once your submodule is added commit the .gitmodules file
Потрясающий! спасибо за полезный ответ. У меня в репозитории 2 ветки. Я разделил этот подмодуль на главном модуле, но у меня возникли проблемы с объединением с моей веткой dev. Если после разделения я попробую git checkout dev, я получу: error: The following untracked working tree files would be overwritten by checkout:Please move or remove them before you switch branches. Есть идеи, как это исправить?
Может я просто этого не вижу, но где собственно создать подмодуль? Просматривая документацию, я думаю, мне нужен
git submodule add ...для каждого извлеченного поддерева?