如何消除签出同一repo的git子模块的重复数据?

如何消除签出同一repo的git子模块的重复数据?,git,git-submodules,git-worktree,Git,Git Submodules,Git Worktree,我想跟踪大型git回购协议的两个不同分支,作为我自己回购协议中的子模块。例如,nixos不稳定和nixos-19.03从分支 有没有一种方法可以添加子模块,这样git就可以避免两次获取repo并避免在本地存储它的两个副本?似乎没有任何真正好的方法可以做到这一点 有一种相当粗糙的方法可以工作,但有一个明显的缺陷: $ git submodule add ssh://[url] p1/repo Cloning into ... [snippage] Resolving deltas: 100% (1

我想跟踪大型git回购协议的两个不同分支,作为我自己回购协议中的子模块。例如,
nixos不稳定
nixos-19.03
从分支


有没有一种方法可以添加子模块,这样git就可以避免两次获取repo并避免在本地存储它的两个副本?

似乎没有任何真正好的方法可以做到这一点

有一种相当粗糙的方法可以工作,但有一个明显的缺陷:

$ 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]
$ 
请注意,
克隆到
消息之外完全没有活动。两个子模块现在都存在,但其中一个子模块有一个
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
中检索其底层对象

最明显的缺陷是,在未来的克隆操作中,这些安排都不会保留,也不会自动发生。每次都必须手动构建