Мы мигрируем в git. У нас есть большое количество модулей, которые составляют наши продукты, некоторые из них разделены между продуктами. Продукт представлен «тонким» супер-репозиторием (ssh: //server/product.git), который содержит только подмодули:
[submodule "module1"]
path=module1
url=ssh://server/product/module1.git
[submodule "module2"]
path=module2
url=ssh://server/product/module2.git
...
Я могу клонировать супер-репозиторий, работать с субмодулями и фиксировать их, а затем фиксировать субмодули в супер-репозиторий.
Проблема возникает, когда я хочу представить другой уровень. Существует два основных сценария (они могут комбинироваться для создания более сложных установок, но что угодно должно быть их комбинацией):
Как разработчик, я клонирую центральное хранилище и работаю. Затем я хочу отправить свой код на наш сервер непрерывной интеграции, прежде чем объединить мои изменения с центральным репозиторием. Я позволил серверу CI клонировать мое хранилище. Это не работает, CI-сервер клонирует мое супер-репо, а затем клонирует субмодули из центрального хранилища (поскольку это то, что сказано в .gitmodules).
Как команда, мы хотим иметь интеграционный репозиторий, к которому мы стремимся, прежде чем мы, в конце спринта, объединяем наш код с центральным репозиторием. Это не удается по той же причине.
Я попытался указать относительные URL-адреса для подмодулей, но это также не работает, поскольку, когда мы клонируем второй уровень в третий уровень, относительные URL-адреса разрешаются относительно местоположения хранилища второго уровня, но местоположений подмодуля второго уровня внутри супер-хранилища второго уровня.
Могу ли я получить это оба? Подмодули Git и структура n-уровневого репозитория?