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

LF将被CRLF取代

这种转变的后果是什么?


当前回答

我不太了解Windows上的Git,但是……

在我看来,Git正在转换返回格式以匹配正在运行的平台(Windows)。CRLF是Windows上的默认返回格式,而LF是大多数其他操作系统的默认返回格式。

当代码被移动到另一个系统时,返回格式可能会得到适当的调整。我还认为Git足够聪明,可以保持二进制文件的完整性,而不是试图在JPEG文件中将lf转换为crlf。

总而言之,您可能不需要为这种转换担心太多。但是,如果您将项目归档为tarball,其他编码员可能会喜欢使用LF行终止符而不是CRLF。取决于你有多关心(取决于你不使用记事本),你可能想要设置Git使用LF返回,如果你可以的话:)

附录:CR为ASCII码13,LF为ASCII码10。因此,CRLF是两个字节,而LF是一个字节。

其他回答

我也有这个问题。

SVN不执行任何行结束转换,因此提交文件时保留CRLF行结束。如果您使用git-svn将项目放入git中,那么CRLF结束符将持续到git存储库中,这不是git希望自己处于的状态——默认情况是只检入unix/linux (LF)行结束符。

当您在windows上签出文件时,selflf转换会保持文件不变(因为它们已经具有当前平台的正确结尾),但是,决定签入文件是否存在差异的进程会在比较之前执行反向转换,从而将它认为是签出文件中的LF与存储库中的意外CRLF进行比较。

在我看来,你的选择是

Re-import your code into a new git repository without using git-svn, this will mean line endings are converted in the intial git commit --all Set autocrlf to false, and ignore the fact that the line endings are not in git's preferred style Check out your files with autocrlf off, fix all the line endings, check everything back in, and turn it back on again. Rewrite your repository's history so that the original commit no longer contains the CRLF that git wasn't expecting. (The usual caveats about history rewriting apply)


注:如果你选择选项2,那么我的经验是,一些辅助工具(rebase, patch等)不能处理CRLF文件,你迟早会得到混合了CRLF和LF(不一致的行尾)的文件。我不知道有什么办法能两全其美。

如果您已经签出了代码,那么文件就已经建立了索引。在更改Git设置后,运行以下命令:

git config --global core.autocrlf input

您应该使用

git rm --cached -r .

并重写Git索引

git reset --hard

注意:这将删除您的本地更改。在你这么做之前考虑把它们藏起来。


来源:配置Git处理行结束符

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

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

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

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

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


点击右下角的CRLF:

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

git config core.autocrlf false