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

LF将被CRLF取代

这种转变的后果是什么?


当前回答

在谈到这个话题时,GitHub上一篇关于行尾的文章经常被提到。

我个人使用经常推荐的核心的经验。自专制的配置设置非常复杂。

我在Cygwin中使用Windows,在不同的时间处理Windows和Unix项目。甚至我的Windows项目有时也使用Bash shell脚本,这需要Unix (LF)行结束符。

使用GitHub推荐的核心。如果我签出一个Unix项目(它在Cygwin上工作得很好-或者我正在为一个我在Linux服务器上使用的项目做贡献),文本文件会用Windows (CRLF)行结束符签出,这会产生问题。

基本上,对于像我这样的混合环境,设置全局核心。在某些情况下,任意选择都不能很好地工作。这个选项可以在本地(存储库)Git配置上设置,但即使是这样,对于同时包含Windows和unix相关内容的项目(例如,我有一个带有一些Bash实用程序脚本的Windows项目)也不够好。

我发现最好的选择是创建每个存储库的.gitattributes文件。GitHub的文章提到了它。

文章中的例子:

# Set the default behavior, in case people don't have core.autocrlf set.
* text=auto

# Explicitly declare text files you want to always be normalized and converted
# to native line endings on checkout.
*.c text
*.h text

# Declare files that will always have CRLF line endings on checkout.
*.sln text eol=crlf

# Denote all files that are truly binary and should not be modified.
*.png binary
*.jpg binary

在我的一个项目的存储库:

* text=auto

*.txt         text eol=lf
*.xml         text eol=lf
*.json        text eol=lf
*.properties  text eol=lf
*.conf        text eol=lf

*.awk  text eol=lf
*.sed  text eol=lf
*.sh   text eol=lf

*.png  binary
*.jpg  binary

*.p12  binary

要设置的东西更多一些,但是每个项目都要设置一次,任何操作系统上的任何贡献者在处理这个项目时都应该不会遇到行结束符的问题。

其他回答

CR和LF是一组特殊的字符,用于帮助格式化代码。

CR (/r)将光标放在一行的开头,但不创建新的行。这就是macOS的工作原理。

LF (/n)创建了一个新行,但它不会将光标放在该行的开头。光标停留在最后一行的末尾。这就是Unix和Linux的工作原理。

CRLF (/r/f)创建新行,并将光标放在新行开头。这就是我们在Windows操作系统中看到的情况。

总结:

Lf(换行)

代表换行 用/n表示 在代码中创建新行 ASCII码是10。 用于Unix和其他基于它的操作系统。

Cr(车厢返程)

代表回车 用/r表示 将光标放在行首。 ASCII码是13。 macOS及其前身使用。

CRLF(回车换行)

代表回车和换行 用/n/r表示 创建新行,并将光标放在新行开头。 LF的ASCII码是10,CR的ASCII码是13。 主要用于Windows操作系统。

Git默认使用LF。因此,当我们在Windows上使用Git时,它会抛出一个像“CRLF将被LF取代”这样的警告,并自动将所有CRLF转换为LF,因此代码变得兼容。

NB:别担心……不要把这看作是警告,而应该把它看作是通知消息。

如何使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将尊重混合行结束项目中的行结束符,而不会就此警告您。

在GNU/Linux shell提示符中,dos2unix和unix2dos命令允许您轻松地转换/格式化来自MS Windows的文件。

许多文本编辑器允许您更改为LF。请参阅下面的Atom指令。它简单明了。


点击右下角的CRLF:

在顶部的下拉菜单中选择LF:

我只是犯了同样的错误。 这是在Windows 10上安装NVM NVM后发生的。

在所有级别设置autoclrf都不起作用。

在CMD中我使用:“git ls-files——eol”

i/lf    w/crlf  attr/             src/components/quotes/ExQuoteForm.js
i/lf    w/lf    attr/             src/components/quotes/HighlightedQuote.js

结论:

我做的文件有不同的结局。

要更改文件和重置,请执行

git config core.autocrlf false
git rm --cached -r .
git reset --hard

尽管:

在一些项目中,我需要删除存储库并重新启动它。