各平台的帖子中都描述了主仓库和子仓库的关系:主仓库和子仓库相对独立;但其实,使用过程中,还会有藕断丝连的关系,影响着主仓的提交;
比如:在git +gerrit +jenkins这样的开发模式下,编译主仓库时无需感知子仓库的版本,默认拉取子仓的最新版本来配合主仓编译;这样的情况下,开发者无需提交主仓和子仓之间的“版本关系”,
但是子仓一旦init和update之后,在主仓中执行git statue后会显示:
“modified: xxx”(xxx为子模块名称)
执行git diff之后显示:
“-Subproject commit xxxxxxxxxxxxxxxxxxx
+Subproject commit xxxxxxxxxxxxxxxxxxx”
这两行代表着主子仓链接关系/版本的变更,当开发者不需要提交此笔modified,或者根本不需要在主仓中看到这个modified时,该怎么解决呢?
通过查看gitmodules官方文档可知,有如下配置项:
--path --url --update --branch --fetchRecursiveSubmodule --ignore --shallow
我们解决上述问题所用的就是容易被忽略的ignore,该项提供四个值:
all dirty untracked none (严格程度按照由高到低)
因此,在".gitmodules"文件中手动添加上ignore选项即可,例
[submodule "xxx"]
path = xxx/xxx
branch = dev
url = http://gerrit.xxx.com/xxx
ignore = all
如此,主仓库中将不再显示任何子仓库的改动,不过,如果强制git add,也是可以将子仓库的修改添加到工作区的。