私は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 または Swiss File Knife を使用して、これらのファイルを自分で変換することです。
私は常に core.autocrlf
をfalse
に保つ を好んでいます。
git config --global core.autocrlf false
私は同じ問題を抱えていて、提案された解決策を試してみましたが成功しませんでした。
2番目のコマンドを実行して機能させる必要がありました。
$ git config --global core.autocrlf false
$ git config --global core.safecrlf false
$ git config core.autocrlf false
Dos2unixを試してみてください:
dos2unix [filename]
これは何千ものファイルで起こりました。そこで、dos2unix
を修正する簡単なbashスクリプトを作成しました。 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
基本的に、git add .
を実行しようとします。コマンドが失敗した場合、エラー出力から互換性のないファイルの名前を取得します。次に、そのファイルに対してdos2unix
を実行します。 git add .
が機能するまでこのプロセスを繰り返します。
これを実行すると、dos2unix: converting file xxx to Unix format...
が繰り返し表示されるはずです。そうしないと、機能しません。 ctrl+c または command+c それを止めるために。
git status
が変更済みとして表示するすべてのファイルを追加する必要があります。
git add file1
git add file2
そして、変更をコミットします。
git commit
これにより、ローカルファイルはそのまま保持されますが、リモートリポジトリにautocrlf
保存されます。
私は同じトラブルに直面し、以下のように.gitattributes
を編集して修正しました。
$ vim .gitattributes
。gitattributesの2行をコメントアウト
-* text=auto
-* text eol=lf
+# * text=auto
+# * text eol=lf
これがあなたに当てはまるかどうかはわかりませんが、ステージングされた変更にすべてのnode_modules
を誤って追加しようとすると、このエラーが発生しました。だから実際に.gitignoring
node_modules
が私の問題を解決した。