472

LFnotを使用して Windows でファイルをチェックアウトするように git を強制したいCR+LF。2 つの構成オプションを確認しましたが、適切な設定の組み合わせを見つけることができませんでした。

すべてのファイルをファイルに変換してLF保持したいLF

注意:私は使用autocrlf = inputしましたが、これはコミット時にファイルを修復するだけです。を使用して強制的に取得したいLF

おそらく私はそれほど明確ではありませんでした: リポジトリは既に使用LFされていますが、msysgit を使用してチェックアウトされたファイルは使用されてCR+LFおり、msysgit に強制的にそれらを取得させたいLF: forcing Unix 行末.

>git config --list | grep crlf
core.autocrlf=input
4

6 に答える 6

582

Windows で LF エンディングを取得する適切な方法は、最初に次のように設定core.autocrlfすることfalseです。

git config --global core.autocrlf false

msysgit を使用している場合はtrue、システム設定で に設定されているため、これを行う必要があります。

これで、git は行末の正規化を行いません。チェックインするファイルを正規化するには、次のようにします。 すべてのファイルに設定text=autoします。.gitattributes

* text=auto

そしてにcore.eol設定lf

git config --global core.eol lf

実行することで、単一のリポジトリを (作業ディレクトリ内で!) crlf に切り替えることもできます。

git config core.eol crlf

構成が完了したら、git でrepo内のすべてのファイルを正規化することができます。これを行うには、リポジトリのルートに移動し、次のコマンドを実行します。

git rm --cached -rf .
git diff --cached --name-only -z | xargs -n 50 -0 git add -f

作業ディレクトリ内のファイルも git で正規化する場合は、次のコマンドを実行します。

git ls-files -z | xargs -0 rm
git checkout .
于 2012-10-31T08:38:57.837 に答える
168

OPは彼の質問に追加しました:

msysgitを使用してチェックアウトされたファイルが使用されてCR+LFおり、msysgitにそれらを強制的に取得させたいLF

最初の簡単なステップは、まだ.gitattributesファイルにあります。

# 2010
*.txt -crlf

# 2020
*.txt text eol=lf 

のコメントに記載されているように、行末変換 を参照)、正しい..gitattributesCRLFeol

そして、変換を無効にすることを常に推奨してきました(これは、 すべてのバージョン管理されたファイルに適用されます) 。git config --global core.autocrlf false

クロス プラットフォームの git config のベスト プラクティスを参照してください。

Git 2.16 (Q1 2018) 以降、これらの設定をすぐgit add --renormalize .に適用するために使用できます。.gitattributes


しかし、2 番目のより強力なステップには、gitattribute フィルター ドライバーが含まれ、スマッジ ステップが追加されます。

フィルタ ドライバ

作業ツリーを更新するときはいつでも、スクリプトは、 で指定したファイルに対してのみ、 および.gitattributes強制LF eolしたいその他の書式設定オプションを強制できます。
" clear" スクリプトが何もしない場合は、(コミット後に) ファイルを変換し、必要な形式を正確に適用します。

于 2010-03-25T16:37:09.520 に答える
27

core.autocrlf=inputは必要な設定に適していますが、変更を有効にするには、git update-index --refreshおよび/またはを実行する必要がある場合があります。git reset --hard

core.autocrlf設定するとinput、gitはチェックアウト時に改行変換を適用しません(したがって、リポジトリにLFがある場合は、LFを取得します)が、混乱して作業中にいくつかのCRLFを導入した場合に備えて確実になりますどういうわけかコピー、彼らはリポジトリに彼らの方法を作りません。

于 2010-04-01T00:23:15.573 に答える
0

この問題の解決策は、 https ://help.github.com/en/github/using-git/configuring-git-to-handle-line-endings にあります。

Windows でこの問題を解決する方法の簡単な説明:

行末のグローバル設定 git config core.autocrlf コマンドは、Git が行末を処理する方法を変更するために使用されます。単一の引数を取ります。

Windows では、設定に true を渡すだけです。例: C:>git config --global core.autocrlf true

幸運を祈ります。

于 2020-03-26T20:54:05.943 に答える