Skip to content

Instantly share code, notes, and snippets.

@lifeicd
Created October 10, 2012 06:57
Show Gist options
  • Save lifeicd/3863585 to your computer and use it in GitHub Desktop.
Save lifeicd/3863585 to your computer and use it in GitHub Desktop.
submodule

TL;DR: 什么时候要用再看吧…也许现在你的兴趣并不大

把这篇文章里的命令打完,就能明白git submodule了 http://git-scm.com/book/en/Git-Tools-Submodules

Submodules are for things such as commonly reused libraries. It should be self-contained.

要点:

  1. submodule在添加或改动时,在主文件夹内commit,会产生特别的submodule型changeset.
  2. git submodule update负责把submodule的HEAD移动到最近的submodule型changeset里记录的SHA的节点

submodule的优势是没有copy & paste的不一致性。我理解的使用流程:

  1. 想要使用某库的时候,使用submodule add加入
  2. 众开发clone仓库,然后submodule init, submodule update,进入可用状态
  3. submodule有更新了,这是tech leader看了一眼,“不错,我们也可以更新”,于是在submodule文件夹里git pull,回到主项目文件夹中,git status发现submodule的HEAD发生变化了,于是commit下一个新的submodule型的changeset,然后push到中心仓库
  4. 众开发pull的时候发现submodule更新了(git pull后,git status会发现submodule文件夹出现了改变;git diff会发现submodule commit的SHA变化了)
  5. 众开发进入submodule文件夹,git pull。回到主项目文件夹内,git submodule update把submodule的HEAD放到正确的位置上。

FAQ:

  1. 要修改submodule里的代码怎么办? 如果你在本地修改了submodule,并且commit了,然后在主项目文件夹里commit。submodule的修改其他人是拿不到的。所以说,submodule一定是self-contained,要修改应该直接pull request给submodule的源(你当初添加submodule时它的remote)。 也只有这样,才能保持submodule的一致性。这正是submodule与copy & paste相比的优势啊!

  2. 在分支间切换时,可能一个分支有submodule,一个没有…这怎么办? http://git-scm.com/book/en/Git-Tools-Submodules#Issues-with-Submodules 很麻烦吧?所以不要这样做,好吧?

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment