托管服务中有好多开发库可以供我们使用,我们怎么将它们引入到我们的项目里面来呢,这就是子模块的概念.

添加

1
git submodule add git://uri directoryName

然后你可以通过git status.gitmodules查看修改内容及子模块信息. 记得添加后要提交.

克隆

现在我们找到一个项目,但是它包含子模块,我们怎么克隆到本地呢

1
git clone --recursive git://uri

当然你也可以

1
git submodule update --init --recursive

现在问题来了,挖掘机哪家强?不不不,是:如果子模块被别人更改了(子模块一般是别人维护的),那会怎样?

别人推送了

这时你只需要合并并再次更新就行了.

别人没推送

这时你就会遇到fatal: reference isn't a tree错误,你只好给那个家伙发邮件了.

子模块策略

我们习惯于将项目模块化,然后在git中将各个目录都做成一个个独立的仓库,然后创建一个上层项目包含这些子模块.但是这样做是有问题的–在更新子模块时容易缺失之前的工作.

  • 一个合理的策略就是在子模块中工作时应该先创建一个分支,在子模块更新后,我们扔可以拥有一个可以回溯的指针.

另一个问题是移动文件到子模块中去