如何让Windows端Git忽略特定文件的Linux可执行权限变更
这个跨平台Git权限的坑我也踩过!Windows的文件系统没有Linux那样的可执行权限位,导致Git在Windows检出Linux提交的755权限文件时,自动转成644,还一直把这个权限变化当成需要提交的修改,连git update-index --chmod=+x都不管用,拉取代码还被卡住。给你两个实用解决方案:
方法1:全局关闭Git权限检测(简单粗暴,适合全项目忽略权限)
如果你的项目里所有文件都不需要追踪权限变化,直接在Windows的Git Bash里执行这个命令:
git config --global core.fileMode false
这个配置会让Git完全忽略所有文件的权限变更,之后就不会再收到权限相关的修改提示了。但要注意:如果之后你确实需要修改某个文件的可执行权限,这个设置会让Git不追踪这个变更,所以只适合完全不需要管权限的场景。
方法2:针对特定文件忽略权限变更(精准控制)
如果只想让Git忽略某个特定文件(比如你的build_apk.sh)的权限变化,用.gitattributes来配置:
- 打开项目根目录,创建或编辑
.gitattributes文件 - 在文件里添加一行:
build_apk.sh filemode=false
保存后,Git就会专门忽略这个文件的权限变化,其他文件的权限变更还是会正常追踪。
清理当前未提交的权限变更
不管用哪种方法,先把当前Git提示的权限变更撤销掉,避免影响后续操作:
git restore build_apk.sh
如果有多个这类文件,可以用:
git checkout HEAD -- .
⚠️ 注意:这个命令会撤销工作区所有未提交的修改,执行前确认没有其他需要保留的变更!
为什么git update-index --chmod=+x在Windows上没用?
因为Windows的NTFS/FAT文件系统没有独立的可执行权限位,Git在Windows上只是模拟权限设置,当你执行git update-index --chmod=+x时,Git尝试更新索引,但Windows文件系统不支持这个权限标记,所以操作会被忽略,文件权限还是会被自动转成644。
内容的提问来源于stack exchange,提问作者GenError




