我如何删除正在检出相同存储库的git子模块的重复数据?

时间:2019-05-13 21:04:10

标签: git git-submodules git-worktree

我想将大型git仓库的两个不同分支作为自己仓库中的子模块进行跟踪。例如,nixos-unstablenixos-19.03https://github.com/nixos/nixpkgs-channels分支。

是否可以添加子模块,以便git避免两次获取存储库,并避免在本地存储两个副本?

1 个答案:

答案 0 :(得分:1)

似乎没有任何真正的方法来实现此目的。

有一种相当有效的方法,但有一个明显的缺陷:

$ 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/repop1/repo.git/modules/p1/repo/objects存储库的对象数据库中检索其基础对象。

一个明显的缺点是,这种安排不会保留在将来的克隆操作中,而且永远不会自动发生。每次必须手动构造它。