CR+LF
ではなくLF
のみを使用して、Windowsでgitにファイルをチェックアウトさせます。 2つの構成オプションをチェックしましたが、適切な設定の組み合わせを見つけることができませんでした。
すべてのファイルをLF
に変換し、ファイルにLF
を保持するようにします。
注:autocrlf = input
を使用しましたが、これはファイルをコミットするときにファイルを修復するだけです。 LF
を使用して強制的に取得させます。
おそらく私はそれほど明確ではありませんでした:リポジトリは既にLF
を使用していますが、msysgitを使用してチェックアウトされたファイルはCR+LF
を使用しており、msysgitにLF
nixの行末を強制する。
>git config --list | grep crlf
core.autocrlf=input
OPは彼の質問に追加しました:
msysgitを使用してチェックアウトされたファイルは
CR+LF
を使用していて、LF
でそれらを取得するためにmsysgitを偽造したいです。
最初の簡単なステップはまだ.gitattributes
ファイルにあります。
*.txt -crlf
、正しいeolを持つファイルのためのどんなcrlf変換も避けるために。
クロスプラットフォームのgit configのベストプラクティスを参照してください。
しかし、さらに強力な2番目のステップは、 gitattribute filter driver を含み、汚れたステップを追加します。
ワーキングツリーを更新するときはいつでも、.gitattributes
で指定したファイルに対してのみ、スクリプトはLF eol
やその他の強制したいフォーマットオプションを強制することができます。
"clear
"スクリプトが何もしないのなら、あなたが従う必要があるフォーマットを正確に適用して(コミット後に)あなたのファイルを変換させるでしょう。
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
設定が完了したら、repoの中のすべてのファイルをgitに正規化させたいと思うかもしれません。これを行うには、リポジトリのルートに移動して次のコマンドを実行します。
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 .
私はこの答えにかなり頻繁に戻りますが、これらのどれも私にとってはまったく正しいものではありません。とは言っても、私にとって正しい答えは他の人の混合物です。
私が見つけたものは以下の通りです:
git config --global core.eol lf
git config --global core.autocrlf input
これらのグローバル設定が設定された後にチェックアウトされたレポジトリの場合、すべてがレポジトリにあるものとしてチェックアウトされます - うまくいけばLF
(\n
)。チェックイン時に、CRLF
はすべてLF
に変換されます。
すでにチェックアウトした既存のリポジトリ(リポジトリの行末は正しいが作業コピーは含まない)で、以下のコマンドを実行して修正できます。
git rm -rf --cached .
git reset --hard HEAD
現在のディレクトリ(-f
)から、編集したもの(--cached
)を除くすべてのファイルを、プロンプト(.
)なしで再帰的に(rm
)削除します(r
)。そしてreset
は、それらのファイルすべてを、(リポジトリの内容と一致するように)それらのファイルの実際の行末がある状態に戻します。
リポジトリのファイルの行末を修正する必要がある場合は、IntelliJやSublime Textのようにまとめて編集できるエディタを使用することをお勧めしますが、これをサポートするものがあると確信しています。
もし、あんたが
あなたはgit 2.10からそれをすることができます。 2.10はtext = autoの動作をeol = lfと一緒に修正 であるため、2.10以降が必要です。 出典 。
以下の内容のgitリポジトリのルートに.gitattributes
ファイルを置きます。
* text=auto eol=lf
それをコミットします。
また、最新のツールで目的の行末を持つ新しいファイルが作成されるように、リポジトリのルートに.editorconfig
を追加することもできます。
# EditorConfig is awesome: http://EditorConfig.org
# top-most EditorConfig file
root = true
# Unix-style newlines with a newline ending every file
[*]
end_of_line = lf
insert_final_newline = true
core.autocrlf=input
はあなたが望むもののための正しい設定ですが、変更を有効にするためにgit update-index --refresh
やgit reset --hard
をする必要があるかもしれません。
core.autocrlf
をinput
に設定すると、gitはチェックアウト時に改行変換を適用しません(したがって、リポジトリにLFがあれば、LFになるでしょう)。何らかの形で作業コピーにCRLFを追加して導入しても、リポジトリに入ることはできません。