检查子模块提交是否与 repo 指向的相同

Check if the submodule commit is the same as what the repo points to

我们正在使用 git 个子模块来管理大型项目。我们在这个大项目中有大约 20 个子模块,并且子模块不经常更新。

在执行 git submodule update 命令告诉 git 检查超级项目索引中已经指定的提交之前,我想检查子模块中是否存在提交?

类似于 git branch --contains $SHA 但对于子模块。

如果它不存在,那么我想在不包含提交或 git submodule foreach git pull

的子模块中做一个 git fetch

理想情况下,我想避免对所有 20 个子模块执行 git submodule foreach git pull,如果子模块提交与 repo 指向的不同,则执行 git 获取。

git submodule foreach --quiet \
'git branch --contains <sha1> 2>/dev/null || echo $(basename $(pwd)) no such commit'

如果当前提交在当前分支中(或者更确切地说在当前树中),将打印有关当前提交的信息,否则打印没有这样的提交(|| 之后的部分)。

|| 之后的部分可用于 运行 git 获取而不是打印信息。