如何强制Git在Windows下使用LF而不是CR+LF ?

我想强制Git在Windows下使用LF而不是CR+LF检出文件。< br / > 我检查了两个配置选项,但没有找到正确的设置组合

我想将所有文件转换为LF换行符,并在文件中保留LF

备注:我使用autocrlf = input,但这只是修复文件时,你提交他们。< br / > 我想强制它使用LF.

可能我没说清楚: 存储库已经使用LF,但是签出的文件使用 Git for Windows使用CR+LF 我想强制Git使用LF来获取它们: 强制Unix行结束

$ git config --list | grep crlf
core.autocrlf=input
352097 次浏览

OP在他的问题中补充道:

使用msysgit签出的文件使用CR+LF,我想强制msysgit使用LF获取它们

第一个简单的步骤仍然在.gitattributes文件中:

# 2010
*.txt -crlf


# 2020
*.txt text eol=lf

(从在评论中注意到孙子,参考.gitattributes行尾转换),以避免任何CRLF转换为正确的eol文件。

我一直推荐 git config --global core.autocrlf false禁用任何转换(这将适用于所有版本文件)

看到# EYZ0

从Git 2.16开始(2018年Q1),您可以使用git add --renormalize .立即应用这些.gitattributes设置。


但是第二个更强大的步骤涉及Gitattribute过滤器驱动程序和添加smudge步骤

filter driver

无论何时你要更新你的工作树,一个脚本可以,只有对于你在.gitattributes中指定的文件,强制LF eol和任何其他你想强制的格式选项 如果“clear”脚本没有做任何事情,你将(在提交后)转换你的文件,应用你需要它们遵循的格式

core.autocrlf=input是您想要的正确设置,但您可能必须执行git update-index --refresh和/或git reset --hard以使更改生效。

core.autocrlf设置为input, git不会在签出时应用换行转换(所以如果你在repo中有LF,你就会得到LF),但它会确保万一你搞混了,并以某种方式在工作副本中引入了一些crlf,它们不会进入repo。

在Windows中获取LF结尾的正确方法是首先将core.autocrlf设置为false:

git config --global core.autocrlf false

如果您正在使用msysgit,则需要这样做,因为它在系统设置中将其设置为true

现在git不会做任何行结束归一化。如果你想要你签入的文件被规范化,这样做:在你的.gitattributes中为所有文件设置text=auto:

* text=auto

core.eol设置为lf:

git config --global core.eol lf

现在,您还可以通过运行将单个repo切换到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 .
我经常回到这个问题上,尽管它的其他答案都不太适合我。
也就是说,对我来说,正确的答案是其他答案的混合

我发现以下方法是有效的:

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

这将递归删除(rm) (-r)没有提示(-f),所有文件,除了那些你已经编辑(--cached),从当前目录(.)。然后,reset将所有这些文件返回到它们具有真实行结束符的状态(匹配repo中的内容)。

如果你需要在repo中修复文件的行结束符,我建议你使用IntelliJ或Sublime Text这样的编辑器,但我相信任何好的编辑器都可能支持这一点。

上下文

如果你

  1. 我想强制所有用户在文本文件中使用LF行结束符
  2. 你不能保证所有用户都改变他们的git配置,

你可以从git 2.10开始。2.10或更高版本是必需的,因为2.10修正了text=auto和eol=lf的行为。# EYZ1。

解决方案

把一个.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

你可以找到这个问题的解决方案: # EYZ0 < / p >

如何在windows上解决此问题的简化描述:

行结束的全局设置 git配置核心。selflf命令用于修改Git处理行结束符的方式。它接受一个参数

在Windows上,您只需将true传递给配置。例如: C:>git配置全局核心。autocrlf真< / p >

祝你好运,希望我能帮到你。