web-dev-qa-db-ja.com

gitattributesの `* text = auto eol = lf`は何をしますか?

これは.gitattributesファイルにあります:

* text=auto eol=lf

これが何をするのかを正確に理解したいと思います。

最初の部分はtext=autoです。 ドキュメント から:

これにより、すべてのファイルGitがテキストと見なすがリポジトリ内で正規化された(LF)行末になることが保証されます。

重要な部分は、Gitがテキストファイルとして検出したファイルに対してのみ正規化を行うことです。

ただし、eol=lfの部分についてはわかりません。テキストファイルのみの正規化も行うと思いますが、ドキュメントでサポートが見つからないため、PNGファイルも正規化されて無効になる場合がありました。

上記のような設定で、「テキストファイルに対して「両方向で正規化を行い、バイナリファイルを残す」という基本的な設定はありますか?一人で?」

30
Borek Bernard

Git 2.10で修正 になり、期待どおりに動作するようになりました。

19
Borek Bernard

答えはノーです。Gitは現在(2.3以降)、バイナリ形式とテキスト形式を自動検出してEOL変換をチェックアウトできないため、テキストのみを処理します。回避策は、選択したファイルタイプ(例、eol=lf)に対してのみ*.txtを指定するか、逆に、特定のファイルタイプをバイナリとして、たとえば*.png binary)。

関連: Gitメーリングリストの機能提案


* text=auto

これにより、リポジトリ内のテキストファイルが正しく正規化されます。ただし、2番目の部分(チェックアウト時のLF強制)は、eol=lfを追加すると残念ながらバイナリファイルも処理されるため、今日では簡単に実現できません。今日の唯一の解決策は、特定のタイプを変換用にマークする(例:*.txt eol=lf)か、逆に特定のタイプをバイナリとしてマークする(例:*.png binary)ことです。

これらは両方とも同じ問題の影響を受けます。特定のファイルタイプは.gitattributesファイルに明示的にリストされている必要があります。つまり、タイプは事前にわかっている必要があるか、すべての開発者が新しいファイルタイプのたびに.gitattributesファイルを更新することを覚えておく必要がありますプロジェクトに表示されます。彼らはしません。

12
Borek Bernard