Управление набором связанных репозиториев относительно Git

У меня есть набор связанных репозиториев, которыми я хочу управлять.

Данные, которые я хочу сохранить, - это "проекты", которые состоят из "библиотек", которые состоят из "единиц". Каждая библиотека хранится во вложенной папке проекта, и каждый блок хранится во вложенной папке библиотеки.

Чтобы иметь возможность повторно использовать библиотеки и блоки между несколькими проектами, я планирую их хранить в соответствии с этой схемой:

repositories/projects/project1
repositories/projects/project2>
repositories/projects/project...
repositories/libraries/library1
repositories/libraries/library2
repositories/libraries/library...
repositories/units/unit1
repositories/units/unit2
repositories/units/unit...

Я хотел бы ссылаться на библиотеки, используемые в проекте относительно (например, использует ../../libraries/library1), а также ссылаться на единицу в библиотеке относительно.

Библиотеки и блоки могут быть изменены только путем изменения проекта, содержащего их. Таким образом, библиотеки и репозитории блоков могут быть голыми, если это необходимо.

Репозиторий на сервере должен выглядеть одинаково (тот же макет папок).

Я уже пробовал использовать подмодули и подход "read-tree/subtree merge", но не смог найти способ указать относительные URL-адреса в хранилищах в случае подмодуля и нажать на изменения в подход чтения-дерева.

То, что я хотел бы сделать, это то, что если я проверю project1, он также выберет все необходимые библиотеки и единицы, и если я изменю библиотеку или единицу через проект, эти изменения можно будет легко перенаправить на сервер.

Ответ 1

Субмодули - это путь для вас и позволяют относительные URL-адреса.

Подмодуль может указать другой URL-адрес подмодуля относительно URL-адреса суперпроекта origin. Поэтому в project1 используйте следующий

git submodule add ../library1
git submodule --init update

И все должно быть хорошо: библиотека1 будет выгружена в каталоге project1, а исходное репо - рядом с project1.