I\'m using Ubuntu 13.10 x64, and I am working on a project that some developers are using Windows , I recently changed the git config core.eol
to \"lf\" and
One may just try dos2unix:
dos2unix [filename]
FYI not sure if this applies to you but I was getting this error when accidentally trying to add all node_modules
to the staged changes. So actually .gitignoring
the node_modules
solved my problem.
I had the same problem and tried the suggested solution with no success.
I had to execute a second command to make it work:
$ git config --global core.autocrlf false
$ git config --global core.safecrlf false
$ git config core.autocrlf false
You need to add all files that git status
displays as modified:
git add file1
git add file2
And then commit your changes :
git commit
This will keep your local files as is, but will autocrlf
them on the remote repository.
This happened to me on thousands of files. So I wrote a quick bash script to make dos2unix
fix it for me. Someone else on Linux or Mac might find it useful.
#!/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
Basically, it tries to do git add .
. If the command fails, it grabs the name of the incompatible file from the error output. Then it runs dos2unix
on that file. It keeps repeating this process until git add .
works.
If you run this, you should see dos2unix: converting file xxx to Unix format...
repeatedly. If you don't, it's not working, so just press ctrl+c or command+c to stop it.