git commit致命错误“致命:CRLF将被replace为LF中的”

我使用的是Ubuntu 13.10 x64,而且我正在开发一个项目,一些开发人员正在使用Windows,我最近将git config core.eol更改为“lf”,将core.autocrlf为“input”,将core.safecrlf为“true ”。 从那时起,当我尝试将文件提交到本地存储库时,出现此错误:
fatal: CRLF would be replaced by LF in ......
据我所知,如果我将core.eol设置为“lf”, core.autocrlf为“input”,git会自动将CRLF转换为LF,但为什么会出现这个错误? 我该如何解决这个问题?

谢谢。

这是一个经典的问题:

sites/toub.es/files/styles/standard_article/public/field/image/firstcommit.png
(图片来自Luis Tubes的博客文章 )

通常的解决办法是用dos2unix或瑞士文件刀自己转换这些文件。

我一直倾向于保持core.autocrlffalse ,这意味着:

 git config --global core.autocrlf false 

我有同样的问题,并尝试build议的解决scheme没有成功。

我不得不执行第二个命令来使其工作:

 $ git config --global core.autocrlf false $ git config --global core.safecrlf false 
 $ git config core.autocrlf false 

你可以试试dos2unix:

 dos2unix [filename] 

这发生在成千上万的文件上。 所以我写了一个快速的bash脚本,使dos2unix为我修复。 Linux或Mac上的其他人可能会觉得它有用。

 #!/bin/bash _unwind-ows() { local output; local path; output=$((git add .) 2>&1); if [ $? -eq 0 ]; then echo "Successfully converted CRLF to LF in all files."; echo "Successfully ran `git add .`."; echo "Done."; return 0; fi; path="$(echo "${output}" | sed -re 's/^fatal: CRLF would be replaced by LF in (.*)\.$/\1/g')"; if [ "${path}" = "${output}" ]; then echo "Regex failed. Could not auto-generate filename from stderr."; return 1; fi; if [ ! -e "${path}" ]; then echo "Regex failed. '${path}' does not exist."; return 1; fi; dos2unix "${path}"; if [ $? -ne 0 ]; then echo "Failed to run \`dos2unix '${path}'\`."; return 1; fi; _unwind-ows; return $?; }; _unwind-ows; 

基本上,它试图做git add . 。 如果该命令失败,则从错误输出中获取不兼容文件的名称。 然后在该文件上运行dos2unix 。 它不断重复这个过程,直到git add . 作品。

如果你运行这个,你应该看到dos2unix: converting file xxx to Unix format...重复。 如果你不这样做,它不工作,所以只需按Ctrl + C命令 + C停止它。

另外, _unwind-ows 。 我自杀了。

您需要添加git status显示为已修改的所有文件:

 git add file1 git add file2 

然后提交您的更改:

 git commit 

这将保持您的本地文件,但会autocrlf他们在远程存储库。