我想强制Git在Windows下只使用LF而不是CR+LF检出文件。
我检查了两个配置选项,但没有找到正确的设置组合。
我想转换所有文件有LF换行,并保持在文件中的LF。
注意:我使用了自专制=输入,但这只是修复文件时,你提交他们。
我想强迫他们使用LF。
可能我说得不太清楚
存储库已经使用LF,但是签出的文件使用LF
Git for Windows使用CR+LF
我想强迫Git用LF来获取它们:
强制Unix行结束符。
$ git config --list | grep crlf
core.autocrlf=input
在Windows中获得LF结尾的正确方法是首先设置核心。专制的虚假:
git config --global core.autocrlf false
如果使用msysgit,则需要这样做,因为它在系统设置中将其设置为true。
现在git不会做任何行结束归一化。如果你想让你签入的文件规范化,可以这样做:在你的.gitattributes中为所有文件设置text=auto:
* text=auto
并设定核心。Eol to lf:
git config --global core.eol lf
现在,您还可以通过运行将单个repo切换到crlf(在工作目录中!)
git config core.eol crlf
在完成配置之后,您可能希望git对repo中的所有文件进行规范化。要做到这一点,请转到你的repo的根目录并运行这些命令:
git rm --cached -rf .
git diff --cached --name-only -z | xargs -n 50 -0 git add -f
如果你现在想让git也规范化你工作目录中的文件,运行这些命令:
git ls-files -z | xargs -0 rm
git checkout .
上下文
如果你
我想强制所有用户在文本文件中使用LF行结束符
你不能保证所有用户都改变他们的git配置,
你可以从git 2.10开始。2.10或更高版本是必需的,因为2.10修复了text=auto和eol=lf的行为。源。
解决方案
把一个.gitattributes文件放在你的git仓库的根目录下,包含以下内容:
* text=auto eol=lf
提交它。
可选的调整
您还可以在存储库的根目录中添加.editorconfig,以确保现代工具创建具有所需行尾的新文件。
# EditorConfig is awesome: http://EditorConfig.org
# top-most EditorConfig file
root = true
# Unix-style newlines with a newline ending every file
[*]
end_of_line = lf
insert_final_newline = true
我经常回到这个问题上,尽管其他答案都不太适合我。
也就是说,对我来说,正确的答案是其他答案的混合。
我发现以下方法是有效的:
git config --global core.eol lf
git config --global core.autocrlf input
对于在这些全局设置设置之后检出的回购(Git存储库),所有内容都将检出为回购中的任何内容—希望是LF (\n)。
任何CRLF都将在签入(提交)时转换为LF。
对于您已经签出的现有回购-在回购中有正确的行尾,但不是您的工作副本-您可以运行以下命令来修复它:
git rm -rf --cached .
git reset --hard HEAD
这将递归地(-r)删除(rm),不提示(-f),所有文件,除了那些你已经编辑(——cached),从当前目录(.)。然后重置将所有这些文件返回到它们具有真实行结束符的状态(与repo中的内容匹配)。
如果你需要在repo中修复文件的行结束符,我建议你使用IntelliJ或Sublime Text这样的编辑器,但我相信任何好的编辑器都可能支持这一点。