158

ほとんどの.gitattributesファイルには* text=auto. text=autoそのファイルの目的は何ですか?

4

3 に答える 3

99

ドキュメントから:

.gitattributes(または.git/info/attributes) ファイルの各行の形式は次のとおりです。

pattern attr1 attr2 ...

ここでは、パターンは*で、これはすべてのファイルを意味し、属性はtext=autoです。

何をしtext=autoますか?ドキュメントから:

テキストが「auto」に設定されている場合、パスは自動行末正規化用にマークされます。Git がコンテンツがテキストであると判断した場合、その行末はチェックイン時に LF に正規化されます。

有効になっていない場合のデフォルトの動作は何ですか?

不明

text 属性が指定されていない場合、Git は core.autocrlf 構成変数を使用して、ファイルを変換する必要があるかどうかを判断します。

何をしcore.autocrlfますか?ドキュメントから:

   core.autocrlf

この変数を「true」に設定することは、すべてのファイルで text 属性を「auto」に設定することとほぼ同じですが、テキスト ファイルが正規化されることが保証されていない点が異なります。リポジトリに CRLF を含むファイルは変更されません。リポジトリに正規化された行末がない場合でも、作業ディレクトリに CRLF 行末を含める場合は、この設定を使用します。この変数は入力に設定できます。この場合、出力変換は実行されません。

これがすべて泥のように明らかだと思うなら、あなたは一人ではありません.

誰かがファイルをコミットすると、Git はそのファイルがテキスト ファイルかどう* text=autoかを推測し、そうであれば、すべての CR + LF バイトが LF バイトに置き換えられたバージョンのファイルをコミットます。作業ツリーでファイルがどのように見えるかには直接影響しません。ファイルをチェックアウトするときに LF バイトを CR + LF バイトに変換する他の設定があります。

おすすめ:

ファイルに入れることはお勧めしませ。代わりに、次のようなものをお勧めします。* text=auto.gitattributes

*.txt text
*.html text
*.css text
*.js text

これにより、どのファイルがテキスト ファイルであるかが明示的に指定され、オブジェクト データベースで CRLF が LF に変換されます (ただし、作業ツリーでは必ずしもそうではありません)。のレポがありましたが* text=auto、Git はイメージ ファイルがテキスト ファイルであると間違って推測し、オブジェクト データベースで CR + LF バイトを LF バイトに置き換えたため、イメージ ファイルが破損しました。それはデバッグするのが楽しいものではありませんでした。

を使用する必要がある場合は* text=auto、それを の最初の行に.gitattributes配置して、後の行でオーバーライドできるようにします。これはますます一般的な慣行になりつつあるようです。

于 2016-06-24T16:08:58.593 に答える
69

行末が正規化されるようにします。出典: Kernel.org

テキストが「auto」に設定されている場合、パスは自動行末正規化用にマークされます。コンテンツがテキストであると git が判断した場合、その行末はチェックイン時に LF に正規化されます。

行末の正規化を強制するソース コード管理システムと相互運用する場合、または単にリポジトリ内のすべてのテキスト ファイルを正規化する場合は、代わりにすべてのファイルのテキスト属性を「auto」に設定する必要があります。

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

于 2014-01-31T05:31:09.340 に答える
9

その構成は、行末の処理方法に関するものです。有効にすると、リポジトリ内のすべての行末が LF に変換されます。作業ディレクトリで行末がどのように変換されるかを処理するフラグは他にもあります。問題に関する完全な情報はこちら: https://www.kernel.org/pub/software/scm/git/docs/gitattributes.html

于 2014-01-31T05:29:16.980 に答える