Mac用户需设git config --global core.autocrlf input并禁用safecrlf,再在项目根目录建.gitattributes统一声明eol=lf及二进制文件规则,最后用git add --renormalize .修复已跟踪文件换行符。

Mac用户参与跨平台协作时,Git频繁提示“LF will be replaced by CRLF”或文件被误标为已修改,本质是Mac默认用LF而Windows默认用CRLF,Git的core.autocrlf配置与项目规则不匹配所致。必须同时约束本地行为与仓库策略,否则单改一方会持续触发冲突。
统一全局基础设置(Mac端必做)
这一步堵住最常出问题的源头:Mac上若设成true,Git会在检出时强行把LF转成CRLF,导致脚本执行失败、编辑器异常换行;设成input才符合Mac原生逻辑。
打开终端,执行:
git config --global core.autocrlf input
验证是否生效:
git config --global core.autocrlf
输出必须是【input】,不是true或false。设错会导致所有文本文件在检出后换行符被破坏,且无法通过.gitattributes覆盖。
顺手禁用安全拦截:
git config --global core.safecrlf false
避免Git因检测到LF/CRLF混存直接拒绝add操作——这在已有历史记录的混合仓库中极常见。
项目级强制规范(团队协作核心)
仅靠Mac端配置无法解决协作问题,必须让整个仓库按同一套规则解释每类文件。关键动作是创建.gitattributes并精确声明。
方法一:快速启用全项目LF标准
在项目根目录新建文件,命名为【.gitattributes】(注意开头是英文点号,不可写成gitattributes或.gitattributes.txt)。
写入以下内容:
* text=auto eol=lf
*.md text eol=lf
*.py text eol=lf
*.sh text eol=lf
*.json text eol=lf
*.yml text eol=lf
*.png binary
*.jpg binary
*.pdf binary
方法二:针对已有污染仓库立即生效
执行命令强制重走归一化流程:
git add --renormalize .
该命令会对比工作区与暂存区换行符差异,并按.gitattributes规则重新处理全部已跟踪文件。
⚠️注意:此操作不会改变未跟踪文件,也不会提交任何东西,但会触发大量文件状态变更。请确保当前没有未提交的关键修改,否则可能丢失本地改动。
修复已错乱的历史文件(必要时执行)
如果已经出现“文件显示已修改但内容无变化”,说明旧文件被错误缓存了换行符状态。新配置和.gitattributes对它们无效,必须手动刷新索引。
第一步:备份未提交变更(重要)
先执行 git status 确认哪些文件是真正有业务修改的,用 git stash 临时保存。
第二步:清除缓存并重置
git rm --cached -r . → git reset --hard
【此操作会丢弃所有未提交的本地修改】,务必在第一步完成后进行。
第三步:重新应用规则
git add .
git commit -m "normalize line endings per .gitattributes"


















