首页 > 代码库 > git submodule 解析

git submodule 解析

submodule 原理
 

submodule 是一个版本库,跟你的主版本库实际上是一个东西。

 
将 submodule add 到你的主版本库,是将一个子版本库的一条提交,也就是head,被主版本库纪录了下来。 主版本库使用这个版本库head之前的代码。
 
git 是一个文件系统,子版本库的remote地址和这个版本库的head,这些纪录究竟保存在哪里呢。
 
我们来具体操作一下
 
我在自己项目中添加了一个临时分支,_my_br, 在这个分支下做下实验
 
尝试将sqlite作为子版本加入到主版本库中
看一下git status
多了一个.gitmodules, 这里面包括sqlite版本库的.git文件路径,也就是主版本库对子版本库的索引
url 是子版本库的地址,path在主版本库中的目录地址,子版本库head,就存在这个目录里,进去看以下
f69b89a078e2200fee54a9f897e6957bd627d8b7 就是引用的sqlite的head提交,可以验证以下
一模一样。
 
add submodule 就在git的文件目录里做了以上的事情。
 
这是submodule的创建
 
如果submodule有了新的提交项,如何更新到主版本库中的索引呢
 
在sqlite3中提交一项
head为4a62cb12e3e806a6a7cf016b60422182a5f93df1
回到主版本库
把它交上去
这时候看以下主版本库中的head
也已经更新了
 
后面就主版本库子版本库就各自push上去就可以了
 
submodule的更新,就一句基本满足需求 git submodule update --init --recursive, 所有submodule都会被更新,这过程中会用到上面提到的url和head索引
 
submodule 删除, 这个需要手动删除了
.gitmodules .git/config 这两个文件中删除sqlite对应部分, .git/modules/ 目录中删除 sqlite目录