git submodule 操作
项目中经常使用别人维护的模块,在git中使用子模块的功能能够大大提高开发效率。使用子模块后,不必负责子模块的维护,只需要在必要的时候同步更新子模块即可。
- 想要在一个工程中使用另一个工程,但是那个工程包含了单独的提交记录,submodule 就可以实现在一个工程中引入另一个工程,同时保留二者的提交记录并且区分开来;目前 submodule 还能实现单独开发子工程,并且不会影响父工程,父工程可以在需要的时候更新子模块的版本;
- 想要把一个工程拆分成多个仓库并进行集中管理,这可以用来实现 git 当前的限制,实现更细粒度的访问,解决当仓库过于庞大时所出现的传输量大、提交记录冗杂、权限分设等问题;
增
添加 Submodule
git submodule add <repo> [<dir>] [-b <branch>] [<path>]
# 其中,url为子模块的路径,path为该子模块存储的目录路径。
# 执行成功后,git status会看到项目中修改了.gitmodules,并增加了一个新文件(为刚刚添加的路径)
# .gitmodules文件:保存项目 URL 与已经拉取的本地目录之间的映射,有多个子模块则含有多条记录,会随着版本控制一起被拉去和推送的。
示例:
cd yourProject
git submodule add https://github.com/imtianx/liba.git
删
删除改子模块
1. 删除子模块文件夹
$ git rm --cached assets
$ rm -rf assets
2. 删除.gitmodules文件中相关子模块信息
[submodule "assets"]
path = assets
url = https://github.com/maonx/vimwiki-assets.git
3. 删除.git/config中的相关子模块信息
[submodule "assets"]
url = https://github.com/maonx/vimwiki-assets.git
4. 删除.git文件夹中的相关子模块文件
$ rm -rf .git/modules/assets
改
修改子模块
在子模块中修改文件后,直接提交到远程项目分支。
$ git add .
$ git ci -m "commit"
$ git push origin HEAD:master
更新子模块
进入到子模块目录下,执行 git pull更新
或者
git submodule update
查
查看子模块
git submodule
e33f854d3f51f5ebd771a68da05ad0371a3c0570 assets (heads/master)