Кажется, нет действительно хорошего способа сделать это.
Есть довольно хакерский метод, который работает, с одним явным дефектом:
$ git submodule add ssh://[url] p1/repo
Cloning into ... [snippage]
Resolving deltas: 100% (173/173), done.
$ git submodule add --reference p1/repo ssh://[url] p2/repo
Cloning into [path]
$
Обратите внимание на полное отсутствие активности за пределами сообщения cloning into
.Оба подмодуля теперь существуют, но у одного есть objects/info/alternates
файл, содержащий путь другого:
$ cat .git/modules/p2/repo/objects/info/alternates
[path]/.git/modules/p1/repo/objects
, так что p2/repo
извлекает свои базовые объекты из базы данных объекта репозитория p1/repo
в .git/modules/p1/repo/objects
.
Очевидным недостатком является то, что ни одна из этих договоренностей не сохраняется при будущих операциях клонирования, и ни одна из них не происходит автоматически, никогда.Каждый раз его нужно создавать вручную.