50

私はWindowsを使用しています。ファイルをステージングすると、このエラーが発生します。

Updating the Git index failed. A rescan will be automatically started to resynchronize git-gui.

LF から CRLF に変換されたファイルのリストが続きます

クロスプラットフォームでの Git の使用に関する CRLF / LF の問題について多くのことを読んだ後、何が起こっているのかを多かれ少なかれ理解し、どの autocrlf 設定が自分に最適かを判断しようとしていますが、なぜ Git がそう言っているのか理解できません。インデックスの更新に失敗しました。私の理解では、EOFが変換されたので、それに関する問題は何であり、インデックスの更新が失敗したと私に言っているのはなぜですか。何かを修正する必要がありますか (適切な autocrlf 設定を選択する以外に)、それとも続行できますか?

次に、Continue と Unlock Index の 2 つのオプションがあります。これらは何を意味し、最善の方法は何ですか。

4

4 に答える 4

55
git config --global core.autocrlf false

常に私の推奨事項でした (「Windows 上の Git 1.6.4 ベータ版 (msysgit) - Unix または DOS ライン ターミネーション」を参照)。

ただし、あなたの場合は「続行」できますが、この警告は、特定のファイルの変換が元に戻せない可能性があることを示しています。

core.safecrlf

true の場合、行末変換がアクティブなときに CRLF の変換が元に戻せるかどうかを git がチェックします。Git は、コマンドが作業ツリー内のファイルを直接または間接的に変更するかどうかを確認します。たとえば、ファイルをコミットした後に同じファイルをチェックアウトすると、作業ツリーに元のファイルが生成されます。これが の現在の設定に当てはまらない場合core.autocrlf、git はファイルを拒否します。
この変数は "warn" に設定できます。この場合、git は元に戻せない変換についてのみ警告しますが、操作は続行します。

このスレッドで説明されているように、この警告を表示したくない場合は、 に設定できcore.safecrlfますfalse

また、git gui のツール メニューからファイルを隠しておき、たとえば、このgit config fileを使用してそれらのツールにいくつかのオプションを追加することもできます。
興味深いのは、ツールごとに以下を追加できることです。

guitool.<name>.norescan

ツールの実行が終了した後、作業ディレクトリを再スキャンして変更を確認しないでください。


Unlock Indexについて少し詳しく教えてください。

index.tclgit-gui スクリプトでそのメッセージを確認できます。インデックスを操作するときに git-gui が作成する index.lock ファイルを削除します。
詳細については、「lockfile API」ドキュメント ページを参照してください。

相互排除
新しいインデックス ファイルを書き出すときは、まず新しいファイルを作成し$GIT_DIR/index.lock、新しい内容をそこに書き込み、最終的な宛先に名前を変更します$GIT_DIR/index。他の誰かがすでにインデックス ファイルを更新しようとしているときに、それを認識して失敗できるように、 でファイル
を作成しようとします。$GIT_DIR/index.lockO_EXCL

于 2012-05-13T19:02:36.480 に答える
2

私のcore.autocrlf設定がすでに設定されていてfalse、設定が解除されていても、私はこれに遭遇しましcore.safecrlfた。犯人は config setting だと思いますdiff.astextplain.textconv

を実行するgit config --listと、次の行が出力に表示されました。

diff.astextplain.textconv=astextplain

この設定が実際に警告/エラーに関連しているとは思いませんが、行われている可能性のあるテキスト変換を調べるきっかけになりました。オンラインとリポジトリで少し調べた後、リポジトリの.gitattributesファイルに次の行を発見しました。

* text=auto

[おそらく、GitHub から.gitattributesファイルを取得しました。]

上記の行のみがコメント解除されており、さらに「自動魔法の」行末変換を扱うことは常に頭痛の種であったため、リポジトリからそのファイルを削除することにしました。その後、同じファイルをステージングしても、「Git インデックスの更新に失敗しました」という警告/エラーが表示されなくなりました。

于 2016-09-26T15:41:51.250 に答える