git submodule 可以在主库下增加一个新的二级module,便于在当前库开发时候和某些其他文件分离开发,通常使用在某个项目中,Core(system)核心和module区分开发。公司现在就是这样做的。

进行submodule开发,需要有两个库,一个是主库,一个是submodule库

$ mkdir main

$ mkdir submodule

$ cd main

$ git init

$ touch main.php

$ git add main.php

$ git commit -m ‘main init’

$ git config receive.denyCurrentBranch ignore

$ cd ../submodule

$ git init

$ touch submodule.php

$ git add submodule.php

$ git commit -m ‘submodule init’

$ git config receive.denyCurrentBranch ignore



如上,我们创建了两个git库,分别为main和submodule,现在进行合并submodule库为main库的submodule

首先克隆main库、submodule库

$ cd /a/new/path

$ git clone git@localhost:/path/to/main

blablablabla

$ ls

main

克隆成功

$ git clone git@localhost:/path/to/submodule

$ ls

main submodule

这样,submodule库也clone下来了。



第二

在main库中增加submodule库

$ cd main

$ git submodule add git@localhost:/path/to/submodule

blablabla

$ ls

submodule main.php

可以看到submodule目录和main.php文件了

$ git status

# On branch master

# Changes to be committed:

# (use "git reset HEAD <file>…" to unstage)

#

# new file: .gitmodules

# new file: submodule



新增了新的文件和目录

$ git commit -m ‘add submodule’

$ git push

//push到remote的repository上去



$ cd ../

$ git clone git@localhost:/path/to/main test

blablabla

$ cd test

$ git pull

balbalbal

$ ls

main submodule

$ git submodule

-e5530773377c8301fa471468dc6c075d9f0909e5 submodule

可以看到submodule



下面我们尝试更新submodule

$ cd ../submodule //切换到submodule repository下,并非test或main repository的submodule目录下

$ touch bootstrap.php

$ git add bootstrap.php

$ git commit -m ‘add bootstrap.php’

$ git push

blablabla

//创建了一个bootstrap.php的文件进行了上传



在main中获取新的submodule代码

$ cd ../main //进入main 的repository

$ git pull

直接进行pull,发现无任何数据下来

$ cd submodule

$ git pull

页面提有文件pull下来

$ cd ../

$ git status

modified submodule(new commit)

$ git add submodule

$ git commit -m ‘update submodule add bootstrap.php’

$ git push

blabalbal提示push成功



$ cd ../test

$ git pull

//提示pull下来数据