1

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

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

在页面的后面,它说

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

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

4

3 回答 3

3

子模块是一个独立的 Git 存储库 - 使它成为子模块的原因是它如何被“超级项目”引用,或者更确切地说,是子模块存储库所在的 Git 存储库。

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

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

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

于 2013-10-17T02:06:02.637 回答
1

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

  • 源树
    • 主代码
    • 子模块

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

  • 从子模块
    • “git 添加子模块的文件”
    • “混帐提交”
    • “混帐推”
  • 来自 SrcTree
    • 添加
    • 犯罪
    • push // 这将更新子模块的指针

Dev1 需要执行以下操作才能正确更新 subModule

于 2013-10-17T01:52:18.573 回答
0

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

于 2013-10-17T08:13:03.137 回答