我想强制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
OP在他的问题中补充道:
使用msysgit签出的文件正在使用CR+LF,我想强制msysgit用LF获取它们
第一个简单的步骤仍然在.gitattributes文件中:
# 2010
*.txt -crlf
# 2020
*.txt text eol=lf
(正如孙子注释中提到的,指的是.gitattributes行结束转换),以避免对具有正确eol的文件进行任何CRLF转换。
我一直推荐git配置——global core。禁止任何转换(这将应用于所有版本文件)
参见跨平台git配置的最佳实践?
从Git 2.16(2018年第一季度)开始,你可以使用Git add—renormalize。立即应用那些.gitattributes设置。
但是第二个更强大的步骤涉及到一个gitattribute过滤器驱动程序和添加一个smudge步骤
每当您要更新工作树时,脚本都可以强制LF eol和您想强制的任何其他格式化选项(仅针对您在.gitattributes中指定的文件)。
如果“clear”脚本什么都不做,那么(在提交之后)您将转换您的文件,应用您需要它们遵循的格式。
OP在他的问题中补充道:
使用msysgit签出的文件正在使用CR+LF,我想强制msysgit用LF获取它们
第一个简单的步骤仍然在.gitattributes文件中:
# 2010
*.txt -crlf
# 2020
*.txt text eol=lf
(正如孙子注释中提到的,指的是.gitattributes行结束转换),以避免对具有正确eol的文件进行任何CRLF转换。
我一直推荐git配置——global core。禁止任何转换(这将应用于所有版本文件)
参见跨平台git配置的最佳实践?
从Git 2.16(2018年第一季度)开始,你可以使用Git add—renormalize。立即应用那些.gitattributes设置。
但是第二个更强大的步骤涉及到一个gitattribute过滤器驱动程序和添加一个smudge步骤
每当您要更新工作树时,脚本都可以强制LF eol和您想强制的任何其他格式化选项(仅针对您在.gitattributes中指定的文件)。
如果“clear”脚本什么都不做,那么(在提交之后)您将转换您的文件,应用您需要它们遵循的格式。
我经常回到这个问题上,尽管其他答案都不太适合我。
也就是说,对我来说,正确的答案是其他答案的混合。
我发现以下方法是有效的:
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这样的编辑器,但我相信任何好的编辑器都可能支持这一点。
上下文
如果你
我想强制所有用户在文本文件中使用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