Git: разделить существующий репозиторий на подмодули

Я нашел ответы только о том, как использовать поддеревья git для разделения репозитория. Однако мне явно нужны подмодули.

Это проект Java maven. В настоящее время все находится в одном проекте maven и одном репозитории. Моя цель - добиться чего-то вроде этого:

Корневой репозиторий должен содержать основной pom.xml, системную документацию и т. д. Затем должно быть несколько подмодулей, один для служебной библиотеки, один для основного приложения и так далее. Подмодули - это их собственный проект maven, на который имеется ссылка из основного проекта maven в корневом репозитории. Корневой репозиторий не будет содержать исходного кода.

Я мог бы создать все новое из текущей HEAD, но для меня важно, чтобы история коммитов сохранялась как можно более полной.

Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
6
0
3 124
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Ответ принят как подходящий

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 ... для каждого извлеченного поддерева?

a.ilchinger 09.12.2018 20:17

Это мне нужен git submodule add ... ... это способ "добавить" ваш подмодуль в ваш oroject, код выше показывает вам, как их создавать

CodeWizard 09.12.2018 20:22

Что такое url? Я знаю один URL-адрес моего удаленного репозитория git. Так что я должен создать конкретный URL-адрес для каждого модуля, который еще не существует ???

Monsio Jérémie Béhi 31.08.2019 12:13

Ага. Точнее, url на каждый подмодуль

CodeWizard 31.08.2019 12:43

Хорошо, спасибо, это то, что я не понял, мне сначала нужно создать удаленные репозитории на сервере git

Monsio Jérémie Béhi 31.08.2019 12:47

Конечно. Создайте репо для каждого модуля, а затем добавьте его в gi

CodeWizard 31.08.2019 12:48
# 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. Есть идеи, как это исправить?

Mr.Weathers 29.05.2020 20:21

Другие вопросы по теме