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,但为什么会出现这个错误? 我该如何解决这个问题? 
谢谢。
这是一个经典的问题:

  (图片来自Luis Tubes的博客文章 ) 
通常的解决办法是用dos2unix或瑞士文件刀自己转换这些文件。
 我一直倾向于保持core.autocrlf为false ,这意味着: 
 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他们在远程存储库。