配置完子模块后,能够在一个大项目中管理不少嵌套的git子项目,固然也能够管理非git子模块目录和文件的变化。下面是我配置的子模块目录。git
在本地也能够提交子模块项目的comit,也能够提交自己项目的commit。 在项目中,git只记录git子模块的commit节点,好比我新提交了一个子模块的commit。github
git子模块在github上只是显示一个子模块的连接。shell
可是在本地,你是能够管理项目和子项目的,只是子模块的commit会提交到本身的仓库,父项目只记录commit。bash
git submodule add ***.git 目录名
复制代码
git submodule update --recursive --remote // -f 还能够强制拉出
复制代码
这个稍微复杂点工具
rm -rf 子模块目录 #删除子模块目录及源码
vi .gitmodules #删除项目目录下.gitmodules文件中子模块相关条目
vi .git/config #删除配置项中子模块相关条目
rm .git/module/子模块名 # 删除模块下的子模块目录,每一个子模块对应一个目录,注意只删除对应的子模块目录便可
#执行完成后,再执行添加子模块命令便可,若是仍然报错,执行以下:
git rm --cached 子模块名称 #完成删除后,提交到仓库便可。
复制代码
这个在不一样操做系统拷贝项目时候,让git忽略文件权限的变化。spa
git config core.filemode false
git submodule foreach --recursive git config core.filemode false # 每一个子模块都忽略
复制代码
推荐一个git工具,gitKraken,它可让你方便的管理子模块的提交。操作系统
默认 git submodule update 并不会将 submodule 切到任何 branch,因此,默认下 submodule 的 HEAD 是处于游离状态的 (detached HEAD state)。因此在修改前,记得必定要用 git checkout master 将当前的 submodule 分支切换到 master,而后才能作修改和提交。命令行
不然你就要使用rebase 或者 cherry-pick了。code
最后记得提交父项目,由于子模块的commit信息更新了,这属于父模块的变化。cdn