在一台Windows机器上,我使用git add添加了一些文件。 我收到警告说:
LF将被CRLF取代
这种转变的后果是什么?
在一台Windows机器上,我使用git add添加了一些文件。 我收到警告说:
LF将被CRLF取代
这种转变的后果是什么?
当前回答
我也有这个问题。
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(不一致的行尾)的文件。我不知道有什么办法能两全其美。
其他回答
unix2dos和dos2unix都可以在Windows Git Bash上使用。可以使用以下命令进行UNIX (LF)→DOS (CRLF)转换。因此,您将不会得到警告。
unix2dos filename
or
dos2unix -D filename
但是,不要在任何现有的CRLF文件上运行这个命令,因为这样每隔两行就会得到空换行符。
dos2unix -D文件名不适用于所有操作系统。请检查此链接的兼容性。
如果出于某种原因你需要强制执行命令,那么使用——force。如果它表示无效,则使用-f。
如何使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将尊重混合行结束项目中的行结束符,而不会就此警告您。
在Vim中,打开文件(例如::e YOURFILEENTER),然后
:set noendofline binary
:wq
OP的问题是与windows相关的,我无法使用其他的目录,甚至无法在notepad++中运行文件,因为管理员无法工作…
所以不得不走这条路:
cd "C:\Program Files (x86)\Git\etc"
git config --global core.autocrlf false
git config core.autocrlf false