我正在使用Ubuntu 13.10 x64,我正在开发一个开发人员正在使用Windows的项目,我最近将git配置更改core.eol为"lf"和core.autocrlf"input"以及core.safecrlf"true".从那时起,当我尝试将文件提交到我的本地存储库时,我得到了这个错误:
fatal: CRLF would be replaced by LF in ......
根据我的理解,如果我设置core.eol为"lf"和core.autocrlf"输入",git会自动将CRLF转换为LF,但为什么会出现此错误出来吗?我该如何解决这个问题?
谢谢.
Von*_*onC 203
这是一个经典问题:

(图片来自Luis Tubes的博客文章)
通常的解决方法是使用dos2unix或Swiss File Knife 自行转换这些文件.
我一直喜欢以保持core.autocrlf对false,这意味着:
git config --global core.autocrlf false
Run Code Online (Sandbox Code Playgroud)
alm*_*lmo 49
我遇到了同样的问题并尝试了建议的解决方案但没有成功.
我必须执行第二个命令才能使其工作:
$ git config --global core.autocrlf false
$ git config --global core.safecrlf false
Run Code Online (Sandbox Code Playgroud)
小智 27
$ git config core.autocrlf false
Run Code Online (Sandbox Code Playgroud)
这发生在我的数千个文件上。所以我写了一个快速的 bash 脚本来dos2unix为我修复它。Linux 或 Mac 上的其他人可能会发现它很有用。
#!/usr/bin/env bash
unwindows() {
local errmsg
local fpath
# base case
errmsg="$(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
fpath="${errmsg#*fatal: CRLF would be replaced by LF in }"
fpath="${fpath%.*}"
if [[ "${fpath}" == "${errmsg}" ]]; then
err 'Regex failed. Could not auto-generate filename from stderr.'
return 1
fi
if [[ ! -e "${fpath}" ]]; then
err "Regex failed. '${fpath}' does not exist."
return 1
fi
if ! dos2unix "${fpath}"; then
err "Failed to run \"dos2unix '${fpath}'\"."
return 1
fi
# recursive case
unwindows
}
err() {
local -r msg="$1"
echo "${msg}" >&2
}
unwindows
Run Code Online (Sandbox Code Playgroud)
基本上,它试图做git add .. 如果命令失败,它会从错误输出中获取不兼容文件的名称。然后它dos2unix在该文件上运行。它不断重复这个过程直到git add .工作。
如果你运行这个,你应该会dos2unix: converting file xxx to Unix format...反复看到。如果你不这样做,它就不起作用,所以只需按ctrl+c或command+c来停止它。
| 归档时间: |
|
| 查看次数: |
70559 次 |
| 最近记录: |