Git submodule 子模块的管理和使用:
子模块的管理和使用
1.添加子模块
git submodule add -f http://code.haxibiao.cn/breeze/icons ./breeze/icons
将 http://code.haxibiao.cn/breeze/icons
克隆到 ./breeze/icons
目录下
2.查看子模块
git submodule
3.初始化子模块
git submodule init
4.更新子模块
git submodule update
5.删除子模块(四个步骤)
- 删除子模块文件夹
rm -rf ./breeze/icons
- 删除.gitmodules文件中相关子模块信息
[submodule "breeze/icons"]
path = breeze/icons
url = http://code.haxibiao.cn/breeze/icons
- 删除.git/config中的相关子模块信息
[submodule "breeze/icons"]
url = http://code.haxibiao.cn/breeze/icons
active = true
- 删除.git/modules文件夹下的相关子模块
rm -rf .git/modules/breeze/icons
- 报错情况:
第一种:git submodule 报(fatal: 在 .gitmodules 中没有发现路径 ‘xxx’ 的子模组映射);
第二种:git submodule init 报(fatal: 在 .gitmodules 中未找到子模组 ‘xxx’ 的 url);
第三种:修改了.gitmodules文件之后执行了 git submodule sync,但是执行 git submodule init 还是报第二种错误,那是因为还有存在缓存。如果执行完sync命令之后又执行了 git rm --cached ‘xxx’(这里是子模块路径,末尾不用加/),但是init的时候还是报第二种错误。
总结
:解决删除子模块报错:需要将.gitmodules文件提交到仓库之后再重新执行 git rm --cached ‘xxx’ 命令清理缓存
6.清理子模块缓存,即删除对应子模块文件夹的索引
git rm --cached 'xxx'(这里是子模块路径,末尾不用加/)
7. 修改.gitmodules中子模块url,需要同步子模块url
如果修改.gitmodules中子模块url,需要同步子模块url,同步之后就可以看到.git/config中子模块的url也更改了
git submodule sync
8.遍历所有子模块切换分支
git submodule foreach git checkout master
9.遍历所有子模块拉取最新代码
git submodule foreach git pull
10.“脏的”子模块。子模块.diff文件有的时候出现-dirty的情况,放弃更改.diff文件也没有效果
- 有的时候是因为该子模块下还有未提交的代码,要是实在看不惯,可以在.gitmodules文件下对应的子模块后加上 ignore = dirty
[submodule "breeze/icons"]
path = breeze/icons
url = http://code.haxibiao.cn/breeze/icons
ignore = dirty
ignore = untracked只忽略未跟踪的文件,ignore = dirty也忽略修改的文件,ignore = all也忽略提交。
-
Git 1.7.2以上版本,可以使用命令 git status --ignore-submodules=dirty 忽略“脏的”子模块
-
也可以将以下配置选项添加到本地git配置中来忽略它:
[diff]
ignoreSubmodules = dirty