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/