我想将大型git仓库的两个不同分支作为自己仓库中的子模块进行跟踪。例如,nixos-unstable
和nixos-19.03
从https://github.com/nixos/nixpkgs-channels分支。
是否可以添加子模块,以便git避免两次获取存储库,并避免在本地存储两个副本?
答案 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/repo
从p1/repo
中.git/modules/p1/repo/objects
存储库的对象数据库中检索其基础对象。
一个明显的缺点是,这种安排不会保留在将来的克隆操作中,而且永远不会自动发生。每次必须手动构造它。