Git子模块:一个令人困惑的声明

时间:2013-10-17 01:14:02

标签: git

Pro Git书中的页面http://git-scm.com/book/en/Git-Tools-Submodules讨论了将子模块创建为git项目中的目录。这是用于添加子模块的命令:

  

$ git submodule add git://github.com/chneukirchen/rack.git rack

在页面的后面,它说

  

您可以将rack目录视为单独的项目,然后更新您的   超级项目,不时指向该子项目中的最新提交。

这是什么意思?我不知道在这种情况下“指针”或“更新”是什么意思。该指针存储在何处以及如何存储?如何更新超级项目?

3 个答案:

答案 0 :(得分:3)

子模块是一个独立的Git仓库 - 它是一个子模块的原因是它是如何被“超级项目”引用的,或者说是子模块仓库所在的Git仓库。

当您对正在用作子模块的仓库进行更改时,您将像平常一样使用Git仓库进行操作 - 您将进行更改,添加,提交并推送它们。但是在子模块仓库中进行这些更改后,您会在“超级项目”仓库中注意到将存在未提交的更改,并且这些更改将引用子模块仓库。

那么改变了什么?好吧,一个“超级项目”仓库密切关注子模块仓库 - 它的位置,名称和(这很重要)它当前的提交。为什么提交?因为它允许您在“超级项目”中指定在子模块中引用的正确提交是什么。这有很多优点 - 使用第三方库(作为子模块)的图片,最近最近更新了一些您尚未更新项目以适应的向后更改。通过保留对旧提交的引用,您可以确保开始处理项目的任何人都将使用正确支持的子模块版本。

如果您想更新“超级项目”以引用子模块的最新提交,只需像添加,提交和推送任何其他更改文件一样。

答案 1 :(得分:1)

Dev1& Dev2具有以下源代码结构。

  • SrcTree
    • MainCode
    • 子模块

Dev2对SubModule进行了一些更改并推送了更改。

    来自subModule的
    • “git add submodule的文件”
    • “git commit”
    • “git push”
  • 来自SrcTree的
    • 添加
    • 提交
    • push //这将更新子模块的指针

Dev1需要执行以下操作才能正确更新子模块

  • git pull //这将更改指针,但不会像上面提到的那样更新子模块here
  • git submodule update //这将更新子模块

答案 2 :(得分:0)

你可以参考这篇关于git子模块的帖子。 http://plasmixs.wordpress.com/2013/10/06/git-submodules/