Лучший пример, который я знаю, это git-submodule [1].
Вы можете определить под-репозитории и иметь «родительский» репозиторий, концептуально содержащий хэш, определяющий точную ревизию каждого под-репозитория..
Когда ваш HEAD перемещается в под-репозиторий, "git status" и "git diff" сообщат об этом как об изменении хэша в родительском репо.
К сожалению, подмодули git являютсяbit clunky:
Когда вы извлекаете родительское репо, оно не будет автоматически обновлять дочерние репо.Вместо этого дочерние репозитории будут выглядеть так, как будто вы внесли локальные изменения (которые возвращают их новую позицию обратно туда, где они были).
Вы должны явно вызвать «git submodule update»каждый раз (или, конечно, сценарий) после извлечения / объединения родительского репо.
Это также означает, что «git rebase» и другие операции над родителем не работаютпри наличии подмодулей.Но у вас здесь есть детальный контроль над поведением, поэтому вы ничего не можете обойти.
[1] http://kernel.org/pub/software/scm/git/docs/git-submodule.html