git -- 子模块的配置与使用

子模块效果

配置完子模块后,能够在一个大项目中管理不少嵌套的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 还能够强制拉出
复制代码

删除Submodule

这个稍微复杂点工具

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子模块

推荐一个git工具,gitKraken,它可让你方便的管理子模块的提交。操作系统

固然,你也能够进入子模块目录使用命令行,注意检查所在的分支。

默认 git submodule update 并不会将 submodule 切到任何 branch,因此,默认下 submodule 的 HEAD 是处于游离状态的 (detached HEAD state)。因此在修改前,记得必定要用 git checkout master 将当前的 submodule 分支切换到 master,而后才能作修改和提交。命令行

不然你就要使用rebase 或者 cherry-pick了。code

最后记得提交父项目,由于子模块的commit信息更新了,这属于父模块的变化。cdn

参考

blog.devtang.com/2013/05/08/…

相关文章
相关标签/搜索