У нас есть несколько более крупный проект, который организован в различных взаимозависимых репозиториях git, следуя древовидной структуре без рекурсии. Далее я попытаюсь изобразить наименьший возможный пример, который бы выделил проблему, которую я пытаюсь решить, даже если в нашем случае глубина дерева может быть относительно большой. Предположим, что система репозиториев и зависимостей подмодулей выглядит следующим образом (обозначение «->» означает использование в качестве подмодуля):
A
B -> A
C -> A, B
Если я использую git clone --recursive
для C, произойдет следующая структура каталогов:
C/
C/A
C/B/A
Это повторение также произойдет внутри каталога .git
: вы найдете .git/modules/A
, .git/modules/B
и .git/modules/B/modules/A
. Хотя я понимаю причины этого, в нашем конкретном случае было бы полезно, если бы структура была больше похожа на следующую (запись: "->" символическая ссылка):
C/A
C/B
C/B/A -> C/A
Итак, если бы я обновил A
внутри B
, он также был бы обновлен в C
, и мне просто нужно было бы зафиксировать изменения в этих репозиториях, и они остались бы синхронизированными. Возможно ли это как-то внутри Git? Существуют ли практические решения этой проблемы?