Core.autocrlf設定のしくみに関するgitドキュメントだけでなく、スタック オーバーフローに関するさまざまな質問と回答も読みました。
これは私が読んだことからの私の理解です:
Unix および Mac OSX (OSX より前は CR を使用) クライアントは LF の行末を使用します。
Windows クライアントは CRLF 行末を使用します。
クライアントで core.autocrlf が true に設定されている場合、git リポジトリは常にファイルを LF 行末形式で保存し、クライアント上のファイルの行末は、チェックアウト/コミット時に前後に変換されます。 -LF 行末。クライアントの行末ファイルの形式に関係なく (これは、Tim Clem の定義と一致しません。以下の更新を参照してください)。
これは、core.autocrlf の 'input' および 'false' 設定について同じことを文書化しようとするマトリックスであり、行末の変換動作が不明な場合は疑問符が付いています。
私の質問は次のとおりです。
- クエスチョンマークはどうあるべきですか?
- このマトリックスは「非疑問符」に対して正しいですか?
コンセンサスが形成されているように見えるので、回答から疑問符を更新します。
core.autocrlf 値 真入力偽 -------------------------------------------------- -------- コミット | 変換 ?? 新しい | to LF (LFに変換?) (無変換?) コミット | に変換 ?番号 既存 | LF(LFに変換?)変換 チェックアウト | に変換 ?番号 既存 | CRLF (無変換?) 変換
さまざまな設定の長所と短所について意見を求めているわけではありません。私は、git が 3 つの設定のそれぞれで動作することを期待する方法を明確にするデータを探しています。
--
2012 年 4 月 17 日更新: コメントで JJD によってリンクされた Tim Clem の記事を読んだ後、上の表の「不明な」値の一部を変更し、「checkout existing | true to convert」を変更しました。クライアントに変換する代わりに CRLF に変換します。」これは彼が与えた定義であり、私が他の場所で見たものよりも明確です:
core.autocrlf = false
これはデフォルトですが、ほとんどの人はこれをすぐに変更することをお勧めします。false を使用した結果、Git がファイルの行末を台無しにすることはありません。LF、CRLF、CR、またはこれら 3 つのランダムな組み合わせでファイルをチェックインでき、Git は気にしません。これにより、差分が読みにくくなり、マージが難しくなる可能性があります。Unix/Linux の世界で働くほとんどの人は、CRLF の問題がなく、ファイルがオブジェクト データベースに書き込まれたり、作業ディレクトリに書き出されたりするたびに Git が余分な作業を行う必要がないため、この値を使用します。
core.autocrlf = true
これは、Git がすべてのテキスト ファイルを処理し、そのファイルをオブジェクト データベースに書き込むときに CRLF が LF に置き換えられ、作業ディレクトリに書き出すときにすべての LF が CRLF に戻されることを意味します。これは、作業ディレクトリに CRLF を保持しながら、他のプラットフォームでリポジトリを使用できるようにするため、Windows で推奨される設定です。
core.autocrlf = 入力
これは、Git がすべてのテキスト ファイルを処理し、そのファイルをオブジェクト データベースに書き込むときに CRLF が LF に置き換えられることを確認することを意味します。ただし、その逆は行いません。オブジェクト データベースからファイルを読み込んで作業ディレクトリに書き込むと、行末を示す LF がまだ残っています。この設定は通常、Unix/Linux/OS X で CRLF がリポジトリに書き込まれないようにするために使用されます。Web ブラウザーからコードを貼り付けて、誤って CRLF をファイルの 1 つに取り込んだ場合、Git は、オブジェクト データベースに書き込むときに、それらが LF に置き換えられることを確認します。
Tim の記事は素晴らしいものです。唯一欠けていると思うのは、リポジトリが LF 形式であると彼が想定していることです。これは、特に Windows のみのプロジェクトの場合、必ずしもそうではありません。
Tim の記事をjmlane によるこれまでの最高投票数の回答と比較すると、true 設定と入力設定が完全に一致し、false 設定が一致していないことがわかります。