Win10下Git设置autocrlf=false仍出现CRLF换行问题求助
解决Win10下Git autocrlf=false仍自动转换换行符的问题
问题根源
从你给出的git ls-files --eol结果里的attr/text=auto就能找到原因:Git属性(gitattributes)的优先级高于core.autocrlf配置。哪怕你把autocrlf设为false,只要存在text=auto的属性规则,Git就会自动识别文本文件,并在检出时把仓库里的LF转换成当前系统默认的换行符——Win10默认是CRLF,所以就出现了你看到的情况。
text=auto的规则可能来自三个地方:
- 仓库根目录的
.gitattributes文件(最常见) - 全局的
.gitattributes配置文件(Win10路径通常是C:\Users\你的用户名\.gitattributes) - Git内置的默认属性规则
另外你git config --list里出现三次core.autocrlf=false,说明全局、系统、本地配置都关了自动转换,但架不住gitattributes的规则覆盖了它。
解决步骤
检查并修改.gitattributes规则
先看仓库根目录有没有.gitattributes文件,打开后找类似* text=auto的行:- 如果要强制所有文本文件保持LF(和远程仓库一致),把该行改成
* text=lf - 如果想完全禁用自动转换,直接删掉
* text=auto这条规则,或者添加* -text(表示所有文件都不视为文本文件,不做换行符转换)
- 如果要强制所有文本文件保持LF(和远程仓库一致),把该行改成
检查全局gitattributes配置
如果仓库里没有.gitattributes,去用户目录下找全局的.gitattributes文件,同样检查并修改text=auto相关规则。强制工作区使用LF
可以在本地仓库的.git/config里额外添加:[core] eol = lf这个配置会强制Git在检出文本文件时使用LF,不管系统默认是什么。
修复已检出的文件
把已经转成CRLF的工作区文件恢复成LF:# 重新规范化所有文件的换行符为LF git add --renormalize . git commit -m "Normalize line endings to LF" # 重置工作区,确保文件是LF格式 git reset --hard HEAD
内容的提问来源于stack exchange,提问作者Dennosaur
相关产品推荐
相关产品推荐

