如何将1个git存储库链接到其他一些存储库?
假设我有以下存储库:
/var/Common.git
/var/Project1.git
/var/Project2.git
现在,我想在其他存储库中使用 Common.git 。我怎么能这样做?
答案 0 :(得分:39)
您可能正在寻找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中。
答案 1 :(得分:4)
这是设计git submodule
的完美案例:http://git-scm.com/docs/git-submodule
在Project1和Project2中,添加Common的子模块。然后你git submodule checkout
在克隆的repo中,它只存储Common git的哈希值。所以你git submodule init
和结帐。