设置core.sharedrepository=group后Git操作偶现permission denied报错
问题根源
这个不是Git的bug,属于配置遗漏,核心原因如下:
core.sharedrepository=group的默认行为仅保证Git对象文件、索引等核心存储文件的组权限开放,FETCH_HEAD、ORIG_HEAD、HEAD这类临时指针文件的权限会继承执行操作用户的系统umask值。如果任意使用该仓库的用户默认umask为022,新生成的FETCH_HEAD权限就会变成644,丢失组可写权限。- 之前执行的
chmod -R g+rwX .仅对已存在的文件生效,新生成的文件不受该命令影响。
修复方案
按优先级选择即可:
- 首选方案:将仓库的共享配置改为显式权限掩码,强制Git覆盖用户umask生成文件:
该配置会强制所有仓库内新建文件权限为664、新建目录权限为2775,完全满足组共享要求。git config core.sharedrepository 0664 - 次选方案:要求所有使用该共享仓库的用户调整默认umask为002,可以在对应用户的shell配置文件(
~/.bashrc、~/.zshrc等)末尾添加:umask 002 - 兜底方案:给仓库目录设置ACL默认规则,强制所有新生成的文件继承组权限:
setfacl -R -m d:g::rwx . setfacl -R -m g::rwx .
注意事项
不要使用sudo执行任何Git仓库操作,sudo会切换到root身份执行命令,生成的文件属主为root,即使权限正确也会导致普通用户无法修改。
内容的提问来源于stack exchange,提问作者Wang
相关产品推荐
相关产品推荐

