8

これは冗長な質問のように聞こえるかもしれません (冗長な質問かもしれません) が、答えが見つかりません。状況は次のとおりです。

私のアプリケーションは、行末として CR を持つテキスト ファイルを作成しています。より具体的には、行末を CR に明示的に設定しているのではなく、たまたまテキスト本文を取得するために使用しているコマンドの出力です。もちろん、CR を LF に手動で変換することもできますが、回避できるのであればそうしたくありません。

Git はこれらのファイルを 1 行として扱います (例: diff 中)。このテスト リポジトリで、行末が原因であると判断しました: https://github.com/jfletcher4d/diff-test

ファイルシステムの行末が何であるかは実際には気にしません。少なくともまだ重要ではありません (これらのファイルをインポートする必要があるかどうかは最終的に気にするかもしれませんが、現在はエクスポートのみです)。しかし、アプリケーションで CR を LF に変換したくないのは、パフォーマンス上の理由と肛門保持性の理由から、回避できる場合です:) つまり、これはテキスト ファイルの作成方法の問題ではなく、どのようにリポジトリ内のすべてのテキスト ファイルが LF のみを持つように強制します。

ファイルが CR でコミットされている場合でも、すべての行末を LFに変更するように git を構成できますか?

私は Windows を使用しており、TortoiseGit と msysgit (および横に小さな TortoiseSVN) を交互に使用して、git を学習しています。

4

2 に答える 2

11

GitはCR行末をサポートしていないように見えるので、改行を変換するためのフィルターを作成します。作業ツリー内のファイルにはCR行末があり、インデックスが作成されると透過的にLFに変換されます。フィルタには2つの部分があります。「clean」はファイルをチェックインし、「smudge」はファイルをチェックアウトします。

でこれを使用してください.git/config

[filter "cr"]
    clean = tr '\\r' '\\n'
    smudge = tr '\\n' '\\r'

そして.git/info/attributes(または.gitattributesバージョン管理する必要がある場合)

* filter=cr

git-diff「クリーン」バージョンを使用するため、これは自動的に幸せになることに注意してください。

パターンを必要なファイルだけに設定することを忘れないでください。そうしないと、バイナリファイルが破損し、すべてのテキストファイルがCR行末でチェックアウトされます。

また、フィルターが構成されていない場合、フィルターはサイレントに失敗するため、リポジトリーの新しいコピーをセットアップするときに構成行を追加することにも注意してください。

于 2012-05-08T02:50:28.850 に答える
2

FWIW、ローカル側で行末をLFに変換することになりました。それは、よりシンプルでバグの少ないソリューションになりました。

于 2012-11-06T23:43:08.527 に答える