git submodule update报dubious ownership加safe.directory仍报错原因
报错根因说明
detected dubious ownership in repository是Git 2.35.2及以上版本新增的安全校验逻辑:执行Git命令时,程序会检查当前操作用户是不是目标仓库目录的属主,如果不是就直接中断操作,目的是防止其他恶意用户篡改仓库里的钩子、配置脚本,骗当前用户运行恶意代码。
你遇到大量子模块重复报错的原因有两个:
- 新挂载硬盘的属主配置不对
新硬盘如果挂载时没手动指定uid/gid参数,整个挂载点下所有文件、目录的默认属主一般是root;要是硬盘用的是NTFS、exFAT这类不支持Unix原生权限体系的文件系统,系统没法正确映射目录属主,也会默认把所有文件归到root名下。你当前登录的操作用户和目录属主对不上,自然会触发Git的所有权校验拦截。 - Git的safe.directory例外不会递归生效
你之前给最外层父仓库加的安全例外,只对这一个仓库路径有效,不会自动应用到目录下的其他子仓库。Git子模块本质就是存在父仓库子目录里的独立Git仓库,每个子模块都有自己的.git元数据目录,执行git submodule update的时候Git会挨个检查每个子模块目录的所有权,只要属主不对就单独抛一次错,子模块多的时候就会刷出一堆同类报错。
如果要彻底解决问题,最稳妥的方式是重新挂载硬盘时指定和你当前用户匹配的uid、gid参数(先执行id命令就能查到自己当前用户的uid、gid值),从文件系统层面把所有目录的属主改对;如果是你自己个人用的工作站,确定这个挂载盘下的内容都安全可信,也可以直接执行git config --global --add safe.directory '*'加全局通配符例外,跳过所有路径的所有权校验。
内容的提问来源于stack exchange,提问作者Huihua Jiang
相关产品推荐
相关产品推荐

