如何消除签出同一repo的git子模块的重复数据?
我想跟踪大型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
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
中检索其底层对象
最明显的缺陷是,在未来的克隆操作中,这些安排都不会保留,也不会自动发生。每次都必须手动构建