在一台Windows机器上,我使用git add添加了一些文件。 我收到警告说:

LF将被CRLF取代

这种转变的后果是什么?


当前回答

如何使Git忽略不同的行结束

http://www.rtuin.nl/2013/02/how-to-make-git-ignore-different-line-endings/(不工作)

您可以完全禁用CRLF行为,或者通过更改.gitattributes文件中的条目来禁用每个文件类型。在我的例子中,我写的是: crlf 这告诉Git忽略所有文件的行结束符。并且不会更改工作目录中的文件。即使你有核心。自专制设置为true, false或输入。

echo "* -crlf" > .gitattributes

在单独提交时执行此操作,否则当您进行单个更改时,Git可能仍然会看到整个文件被修改(取决于您是否更改了selflf选项)。

这个真的有用。Git将尊重混合行结束项目中的行结束符,而不会就此警告您。

其他回答

在notepad++中打开文件。 进入菜单编辑→EOL转换。 单击Windows格式。 保存文件。

这些消息是由于core的默认值不正确造成的。在Windows上自定义。

selflf的概念是透明地处理行结束符转换。确实如此!

坏消息:该值需要手动配置。

好消息:每个Git安装只需要执行一次(每个项目设置也可以)。

selff如何工作:

core.autocrlf=true:      core.autocrlf=input:     core.autocrlf=false:

     repository               repository               repository
      ^      V                 ^      V                 ^      V
     /        \               /        \               /        \
crlf->lf    lf->crlf     crlf->lf       \             /          \
   /            \           /            \           /            \

这里crlf = win-style的行尾标记,lf = unix-style(自Mac OS X以来也用于Mac)。

(pre-osx cr不受上述三个选项中的任何一个的影响。)

这个警告什么时候显示(在Windows下)?

如果你的一个文件中有unix风格的lf (= RARELY), 如果你有win-style的crlf在你的一个文件(=几乎总是), - selflf = false - NEVER!

这个警告是什么意思?

警告“LF将被CRLF取代”表示您(拥有自自LF =true)将在提交签出周期后失去unix风格的LF(它将被windows风格的CRLF取代)。Git并不期望你在Windows下使用unix风格的LF。

警告“CRLF将被LF取代”表示您(拥有自自LF =input)将在提交签出周期后失去windows风格的CRLF(它将被unix风格的LF取代)。不要在Windows下使用输入。

这是另一种显示selff如何工作的方法

1) true:             x -> LF -> CRLF
2) input:            x -> LF -> LF
3) false:            x -> x -> x

其中x是CRLF (windows风格)或LF (unix风格)和箭头代表

file to commit -> repository -> checked out file

如何修复

core的默认值。在Git安装过程中选择自定义自定义自定义自定义自定义自定义自定义自定义自定义自定义自定义自定义自定义自定义自定义。还有(按以下顺序级联):

-“global”(每个用户)gitconfig位于~/。Gitconfig,另一个 -“global”(每个用户)gitconfig $XDG_CONFIG_HOME/git/config或$HOME/配置/ git /配置和 -“local”(per-repo) gitconfig在工作目录的.git/config。

所以,写git config core。在工作目录中查看当前使用的值和

- git配置——系统核心。自专制错误#每系统解决方案 - git配置全局核心。专制错误#每用户解决方案 - git配置——local core。自专制错误#每个项目解决方案

警告

- git配置设置可以被gitattributes设置覆盖。 - CRLF -> lf转换仅在添加新文件时发生,已经存在于repo中的CRLF文件不受影响。

寓意(适用于Windows):

-使用核心。如果你计划在Unix下使用这个项目(并且不愿意将你的编辑器/IDE配置为使用Unix行结束符),自专制语句= true, -使用核心。如果你计划只在Windows下使用这个项目(或者你已经将你的编辑器/IDE配置为使用unix行结束符),自专制语句= false, -永远不要使用核心。除非你有一个很好的理由(例如,如果你在Windows下使用unix实用程序,或者如果你遇到makefiles问题),

安装Git for Windows时选择什么?

如果您不打算在Unix下使用任何项目,请不要同意默认的第一个选项。选择第三个(按原样签出,按原样提交)。你不会看到这条消息。永远。

PPS:我的个人偏好是将编辑器/IDE配置为使用unix风格的结尾,并设置核心。专制到虚伪。

更新(2022)

自2018年以来,git可以根据需要重新规格化回购修复现有的行结束。

从~/。gitattributes文件,

* text = auto

将防止Git首先检查行结束符。

在两个不同的操作系统(Linux和Windows)中使用“代码”时,CRLF可能会导致一些问题。

我的Python脚本是在Linux Docker容器中编写的,然后使用Windows的Git Bash推送。它给了我LF将被CRLF取代的警告。我并没有想太多,但当我后来开始写剧本时,它说:

/usr/bin/env: 'python\r':没有这样的文件或目录

现在这个r对你们来说是ramification的意思。Windows在“\n”上方使用“CR”-换行符- \n\r。这是你可能需要考虑的事情。

Windows中的大多数工具也接受文本文件中的简单LF。例如,你可以在一个名为'的文件中控制Visual Studio的行为。Editorconfig '使用以下示例内容(部分):

 indent_style = space
 indent_size = 2
 end_of_line = lf    <<====
 charset = utf-8

只有原来的Windows记事本不能使用LF,但有一些更合适的简单编辑器工具可用!

因此你也应该在Windows的文本文件中使用LF。这是我的信息,强烈推荐!没有任何理由在窗口中使用CRLF !

(同样的讨论是在C/ c++中使用\ in include路径。这是牛的粪便。使用#include <pathTo/myheader.h> +斜杠!它是C/++标准,所有微软编译器都支持它)。

因此Git的正确设置是:

git config core.autocrlf false

我想说的是:忘记dos2unix和unix2dos这类思维陈旧的程序吧。在您的团队中阐明LF适合在Windows下使用。