在一台Windows机器上,我使用git add添加了一些文件。 我收到警告说:
LF将被CRLF取代
这种转变的后果是什么?
在一台Windows机器上,我使用git add添加了一些文件。 我收到警告说:
LF将被CRLF取代
这种转变的后果是什么?
当前回答
如果您已经签出了代码,那么文件就已经建立了索引。在更改Git设置后,运行以下命令:
git config --global core.autocrlf input
您应该使用
git rm --cached -r .
并重写Git索引
git reset --hard
注意:这将删除您的本地更改。在你这么做之前考虑把它们藏起来。
来源:配置Git处理行结束符
其他回答
我也有这个问题。
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(不一致的行尾)的文件。我不知道有什么办法能两全其美。
在谈到这个话题时,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
要设置的东西更多一些,但是每个项目都要设置一次,任何操作系统上的任何贡献者在处理这个项目时都应该不会遇到行结束符的问题。
unix2dos和dos2unix都可以在Windows Git Bash上使用。可以使用以下命令进行UNIX (LF)→DOS (CRLF)转换。因此,您将不会得到警告。
unix2dos filename
or
dos2unix -D filename
但是,不要在任何现有的CRLF文件上运行这个命令,因为这样每隔两行就会得到空换行符。
dos2unix -D文件名不适用于所有操作系统。请检查此链接的兼容性。
如果出于某种原因你需要强制执行命令,那么使用——force。如果它表示无效,则使用-f。
我只是犯了同样的错误。 这是在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
尽管:
在一些项目中,我需要删除存储库并重新启动它。
我认为Basiloungas的答案很接近,但已经过时了(至少在Mac上)。
打开~/。并将safecrlf设置为false:
[core]
autocrlf = input
safecrlf = false
*显然会使它忽略行char的结尾(它对我来说是有效的)。