如何阻止Git自动将DOS换行符转换为Unix格式?
当然可以!你完全可以通过配置本地 Git 设置来阻止这种自动换行符转换,这样你的提交就只会显示你真正修改过的内容。下面一步步来解决这个问题:
先检查当前的换行符配置
先看看你的 Git 现在的换行符相关设置是什么样的,在仓库目录下运行:git config --list | grep -E "(autocrlf|eol|attributes)"这会列出所有和换行符、文件属性相关的配置项。
禁用仓库级别的自动换行符转换
最稳妥的方式是针对这个特定仓库关闭自动转换(不会影响你其他的 Git 仓库)。在仓库目录下执行:git config core.autocrlf false这个设置会让 Git 完全停止自动转换换行符,提交时会保留你 Eclipse 保存的 DOS 换行符(CRLF),和仓库现有文件的格式保持一致,这样就不会出现所有行都被标记为变更的情况了。
如果仓库有 .gitattributes 文件强制转换
要是仓库根目录下存在.gitattributes文件,并且里面有类似* text=auto的配置,它会覆盖你的本地设置。这种情况下,你可以创建一个本地属性文件来覆盖它:- 在你的用户目录下创建一个文件,比如
~/.gitattributes_local,内容写:* !text - 然后在仓库目录下执行命令让 Git 读取这个本地属性文件:
git config core.attributesFile ~/.gitattributes_local
这个配置会取消所有文件的文本自动转换属性,绕过仓库的
.gitattributes设置。- 在你的用户目录下创建一个文件,比如
重置已标记为变更的文件(如果需要)
如果你之前已经把被转换换行符的文件加入了暂存区,需要先取消暂存并恢复原文件:git reset HEAD . git checkout .这样就能把工作区的文件恢复成仓库里的 DOS 格式,之后再修改提交就只会显示真正的变更了。
最后验证一下:修改一个文件并保存,然后运行 git status,应该只会看到你修改的那几行被标记为变更,而不是整个文件的所有行。
内容的提问来源于stack exchange,提问作者Steve
相关产品推荐
相关产品推荐

