git在macos上提示“权限冲突”实为文件权限变更导致的假修改;可通过git status --ignored和git diff --stat确认,推荐全局执行git config --global core.filemode false禁用权限追踪。
git 在 macos 上提示“权限冲突”,通常不是真正的“代码冲突”,而是 git 检测到文件权限(如可执行位 chmod +x)发生了变化,但本地配置未明确处理该行为。这类问题不会阻断提交,但会反复出现在 git status 中,干扰判断,甚至在协作时引发误提交。
确认是不是权限变更导致的“假冲突”
运行以下命令查看当前工作区中哪些文件被 Git 认为“已修改”,但实际可能只是权限变了:
git status --ignored
如果看到类似下面的输出:
modified: script.sh(但你没改内容)
再执行:
git diff --stat
若输出为空,或只显示 old mode 100644 / new mode 100755,就说明是权限变更,不是内容冲突。
关闭 Git 的文件权限追踪(推荐 macOS 用户启用)
macOS 默认使用 HFS+ 或 APFS 文件系统,对可执行位敏感,而多数项目并不依赖脚本权限参与版本控制。建议全局禁用权限检查:
- 执行命令:
git config --global core.filemode false - 效果:Git 将忽略
chmod变化,不再把权限改动当作“修改” - 注意:该设置不影响已暂存的权限变更,如之前已
git add script.sh过,需先重置: git reset HEAD script.sh && git checkout -- script.sh
排查真实权限问题(当涉及部署或脚本执行时)
如果项目确实需要保留可执行权限(如 Shell 脚本、CI 配置),则需主动管理,而非让 Git 自动探测:
- 显式设置权限并提交:
chmod +x deploy.sh && git add --chmod=+x deploy.sh - 验证是否生效:
git ls-files --stage | grep deploy.sh,应显示100755 - 避免混用 GUI 工具或编辑器自动改权限(如 VS Code 保存时重设 mode),可在编辑器设置中关闭“保存时修复权限”类选项
检查是否被 .gitattributes 干扰
有些项目根目录下有 .gitattributes 文件,其中可能包含:
* text=auto eol=lf 或 *.sh executable
这类规则会影响 Git 对文件类型和权限的处理。可临时重命名该文件测试:
mv .gitattributes .gitattributes.bak && git status
若“假修改”消失,说明是规则导致,需根据团队规范调整对应行,而非直接删除。











