Git 子模块:一个令人困惑的语句

  • 本文关键字:语句 一个 模块 Git git
  • 更新时间 :
  • 英文 :

Pro

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

$ git 子模块添加 git://github.com/chneukirchen/rack.git 机架

在页面的后面,它说

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

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

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

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

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

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

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

  • 源树
    • 主代码
    • 子模块

Dev2 对子模块进行一些更改并推送更改。

  • 从子模块
    • "git 添加子模块的文件"
    • "git commit"
    • "git push"
  • 来自 SrcTree
    • push//这将更新子模块的指针

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

  • git pull//这将更改指针,但不会更新此处提到的子模块
  • git 子模块更新/
  • /这将更新子模块

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

最新更新