web-dev-qa-db-ja.com

git commit get fatal error "致命的:CRLFはLF inに置き換えられます"

私は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に変換しますが、なぜこのエラーが発生しますか?この問題を修正するにはどうすればよいですか?

ありがとうございました。

72
aserww106

これは古典的な問題です。

http://toub.es/sites/toub.es/files/styles/standard_article/public/field/image/firstcommit.png
Luis Tubesブログ投稿 からの写真)

通常の修正は、 dos2unix または Swiss File Knife を使用して、これらのファイルを自分で変換することです。

私は常に core.autocrlffalseに保つ を好んでいます。

git config --global core.autocrlf false
198
VonC

私は同じ問題を抱えていて、提案された解決策を試してみましたが成功しませんでした。

2番目のコマンドを実行して機能させる必要がありました。

$ git config --global core.autocrlf false
$ git config --global core.safecrlf false
46
almo
$ git config core.autocrlf false
27
Arun

Dos2unixを試してみてください:

dos2unix [filename]
8
Yola

これは何千ものファイルで起こりました。そこで、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 それを止めるために。

4
GreenRaccoon23

git statusが変更済みとして表示するすべてのファイルを追加する必要があります。

git add file1
git add file2

そして、変更をコミットします。

git commit

これにより、ローカルファイルはそのまま保持されますが、リモートリポジトリにautocrlf保存されます。

0
Karl.S

私は同じトラブルに直面し、以下のように.gitattributesを編集して修正しました。

$ vim .gitattributes

。gitattributesの2行をコメントアウト

-* text=auto
-* text eol=lf
+# * text=auto
+# * text eol=lf
0
Kazma Arakaki

これがあなたに当てはまるかどうかはわかりませんが、ステージングされた変更にすべてのnode_modulesを誤って追加しようとすると、このエラーが発生しました。だから実際に.gitignoringnode_modulesが私の問題を解決した。

0
Nickofthyme