我想强迫Git在Windows下签出文件,只使用LF而不是CR+LF。
我检查了这两个配置选项,但未能找到正确的设置组合。
我希望将所有文件转换为LF换行,并将LF保存在文件中。
备注:我使用了autocrlf = input,但这只是在提交文件时修复它们。
我想强迫它让他们使用LF。
也许我不太清楚:存储库已经在使用LF了,但是使用用于Windows的Git签出的文件使用的是CR+LF,我想强迫Git使用LF:强制Unix行结束来获得它们。
$ git config --list | grep crlf
core.autocrlf=input发布于 2010-03-25 16:37:09
“任择议定书”在其问题中补充说:
使用msysgit签出的文件使用的是
CR+LF,我希望强制msysgit使用LF获取它们。
第一个简单的步骤仍然是在.gitattributes文件中:
# 2010
*.txt -crlf
# 2020
*.txt text eol=lf ( 评论中注意到 by 孙女,指的是行尾转换),以避免对具有正确eol的文件进行CRLF转换。
和我一直建议 git config --global core.autocrlf false来禁用任何转换(这将适用于所有版本文件)
自Git 2.16以来 (Q1 2018),您可以使用git add --renormalize .立即应用这些.gitattributes设置。
但是第二个更强大的步骤涉及到一个gitattribute过滤器驱动程序并添加一个污点步骤。

无论何时更新工作树,脚本都可以强制执行.gitattributes中指定的文件和任何其他格式设置选项,仅针对您在LF eol中指定的文件。
如果"clear“脚本没有做任何事情,那么您将(在提交之后)转换您的文件,完全应用您需要它们遵循的格式。
发布于 2012-10-31 08:38:57
在Windows中获取LF结尾的正确方法是首先将core.autocrlf设置为false
git config --global core.autocrlf false如果使用msysgit,则需要这样做,因为它在系统设置中将其设置为true。
现在,git不会执行任何结束规范化的行。如果希望将签入的文件标准化,请执行以下操作:在text=auto中为所有文件设置.gitattributes:
* text=auto并将core.eol设置为lf
git config --global core.eol lf现在还可以将单个repos切换到crlf (在工作目录中!)通过跑
git config core.eol crlf在完成配置之后,您可能希望git将回购中的所有文件规范化。要做到这一点,请转到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 .发布于 2015-10-29 21:24:19
我经常回到这个问题上,尽管它的其他答案都不适合我。
话虽如此,对我来说,正确的答案是其他问题的混合。
我发现的工作如下:
git config --global core.eol lf
git config --global core.autocrlf input对于在设置这些全局设置后签出的repos (Git存储库),所有内容都将被签出,无论它在回购程序中是什么--希望是LF (\n)。
在签入(提交)时,任何CRLF都将被转换为LF。
使用您已经签出的现有回购(它在回购中有正确的行尾,而不是工作副本),您可以运行以下命令来修复它:
git rm -rf --cached .
git reset --hard HEAD这将从当前目录(rm) (.)中递归删除(-r),而不使用提示符(-f),除已编辑的文件(--cached)之外的所有文件。然后,reset将所有这些文件返回到它们有真正行尾的状态(匹配回购中的内容)。
如果您需要修复回购中文件的行尾,我建议抓取一个编辑器,它可以让您像IntelliJ或Sublime那样进行批量操作,但我相信任何好的编辑器都可能支持这一点。
https://stackoverflow.com/questions/2517190
复制相似问题