Git中取消各子模块core.fileMode设置报错,求原因及解决办法
Git子模块取消core.fileMode配置时报错的问题解答
执行命令及报错信息
$ git submodule foreach --recursive "git config --unset core.fileMode" Entering 'buildSrc' fatal: run_command returned non-zero status for buildSrc
1. 非零状态报错的原因
- 目标子模块
buildSrc中不存在core.fileMode配置项:git config --unset命令在要删除的配置不存在时会返回非零状态,触发整个循环中断 - 子模块的Git仓库损坏或未正确初始化:
buildSrc的.git目录缺失、损坏,导致Git命令无法正常执行 - 无
buildSrc目录的读写权限:执行Git配置命令时没有足够权限修改仓库配置
2. 解决方法
方法1:忽略单个子模块的执行失败,继续处理所有子模块
修改命令,添加|| true让单个子模块的执行失败不中断整个循环:
git submodule foreach --recursive "git config --unset core.fileMode || true"
这个命令会尝试为每个子模块取消配置,即使某个子模块没有该配置或执行失败,也会继续处理其他子模块。
方法2:排查并修复报错的buildSrc子模块
- 进入
buildSrc目录,手动执行命令查看具体错误:
cd buildSrc git config --unset core.fileMode
- 根据具体错误处理:
- 若提示
error: key does not exist:说明该子模块本来就没有core.fileMode配置,无需修复,直接用方法1的命令跳过即可 - 若提示权限错误:调整目录权限(以Linux/macOS为例):
chmod -R u+w ../buildSrc
- 若提示Git仓库损坏:重新初始化该子模块:
cd .. git submodule deinit buildSrc git submodule update --init buildSrc
内容的提问来源于stack exchange,提问作者tribbloid
相关产品推荐
相关产品推荐

