Git submodule 子模块的管理和使用

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.删除子模块(四个步骤)

  1. 删除子模块文件夹
 rm -rf ./breeze/icons
  1. 删除.gitmodules文件中相关子模块信息
 [submodule "breeze/icons"]
    path = breeze/icons
    url = http://code.haxibiao.cn/breeze/icons
  1. 删除.git/config中的相关子模块信息
 [submodule "breeze/icons"]
        url = http://code.haxibiao.cn/breeze/icons
        active = true
  1. 删除.git/modules文件夹下的相关子模块
 rm -rf .git/modules/breeze/icons
  1. 报错情况:

第一种: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
上一篇:Git submodules


下一篇:git子仓库,子模块submodule的使用