如何将一个git仓库链接到其他多个仓库?

26
如何将1个git仓库链接到其他仓库?
假设我有以下仓库:
/var/Common.git
/var/Project1.git
/var/Project2.git
现在,我想在其他仓库中使用Common.git。我该如何操作?

https://git.wiki.kernel.org/index.php/GitSubmoduleTutorial - Behrouz.M
2个回答

43

你可能在寻找子模块(submodules)

子模块允许将外部存储库嵌入到源代码树的专用子目录中,并且始终指向特定的提交。

这里有一个关键词是嵌入(embedded):Common.git的实际克隆将被嵌入到其他项目的每个副本中。当你不需要在其他项目中修改它,只需使用一个版本并不时从原始的Common.git更新该版本时,通常会采用这种方式。你可以像这样进行操作:

# add Common.git as a submodule at the path "common" inside this repo
git submodule add /var/Common.git common
# initialize it, clone, and check out a copy
git submodule update --init
# commit the addition of the submodule
git commit

请注意,子模块的路径将会被提交到您的代码库中,因此您应该使用公开可用的URL。如果您想在本地自定义它,可以运行git submodule init,编辑.git/config中的URL,然后运行git submodule update。如果您还有疑问,请参考手册或搜索SO;这里有大量的子模块问题。

另一方面,如果您将编辑每个项目内Common.git的内容,您可能希望使用git-subtree,它是git子树合并功能的友好封装。这将使您能够将common.git的内容视为每个项目内已跟踪的内容,同时仍然能够将其拆分并合并到Common.git本身中,并将Common.git的更新合并回项目中。


5
这是使用git submodule的完美案例:http://git-scm.com/docs/git-submodule 在Project1和Project2中,您可以添加Common的子模块。然后进行git submodule checkout操作。
在克隆的存储库中,它仅存储了Common git的哈希值。因此,您需要进行git submodule init和checkout操作。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接