使用git子模块和子树在概念上有什么区别?
它们的典型场景是什么?
概念上的区别是:
使用git子,你通常想把一个大的存储库分离成小的存储库。引用子模块的方法是maven-style——你引用了来自另一个(子模块)存储库的单个提交。如果需要在子模块中进行更改,则必须在子模块中进行提交/推送,然后在主存储库中引用新的提交,然后在主存储库中提交/推送已更改的引用。通过这种方式,您必须能够访问完整构建的两个存储库。
如果我想链接总是指向外部回购的HEAD怎么办?
你可以让一个子模块遵循子模块远程回购分支的HEAD,使用:
git submodule add -b <branch> <repository> [<path>]
git submodule update --remote
<repository>/<branch>
origin/master
--remote
另外,正如的评论中的philb所指出的,git subtree是一个contrib/,而不是git submodule(核心命令)
git subtree
contrib/
git submodule
子模块为link;
子树是复制的
考虑子树和子模块的最简单方法是,子树是一个存储库的副本,它被拉入父存储库,而子模块是指向另一个存储库中特定提交的指针。