`.gitattributes`ファイルの` text = auto`の目的は何ですか?


回答:


77

ドキュメントから:

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

pattern attr1 attr2 ...

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

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

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

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

不特定

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

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

   core.autocrlf

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

泥と同じくらいはっきりしていると思えば、あなたは一人ではありません。

これ* text=autoが私の言葉です:誰かがファイルをコミットすると、Gitはそのファイルがテキストファイルかどうかを推測し、テキストファイルである場合は、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て、後の行で上書きできるようにします。これはますます人気のある習慣になっているようです。


2
なぜ誰もがLFを通常と呼びますがCRLFとは呼びませんか?それを証明するための参照はありますか?
Yousha Aleayoub 2017

1
@YoushaAleayoubどういう意味ですか?
Flimm 2017

1
@YoushaAleayoubがをeveryone参照している場合は、git-scmおそらく* nixパッケージを開発しているため、* nix改行文字の使用は正常です。
ジャスティンモー

4
@YoushaAleayoub LFは「通常の」b / cと見なされ、多くの開発ツールで一般的です。git-scm* nixからのような人気のある開発ツール。MacOSはLFを使用します。Windows(メインストリームOSのみを考慮する)のみがCRLFを使用しています。これにより、Windowsで* nixツールを使用する開発者にとって、およびファイルを交換するときに誰にとっても困難になります。Why CRLFも参照してください。
Roi Danton 2018年

2
@Flimm、*.txt text=autoとの違いを説明して*.txt textください。上記の例の4行はすべて、ファイル拡張子のtext=auto直後textではなく、である必要があると思いました。たとえば、KiCadフットプリントファイル(「.kicad_mod」拡張子)は、gitattributesファイルの次の行を使用して正規化されます:*.kicad_mod text=autokicad-pcb.org/libraries/klc/G1.7)。
ガブリエルステープルズ

64

これにより、行末が正規化されます。出典:Kernel.org

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

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

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


12
正規化された行末とはどういう意味ですか?
Fizer Khan

14
When a text file is normalized, its line endings are converted to LF in the repository.
Dave Zych 2014年

11
知っておくことが重要、これはあなたのマシン上のローカルcore.autocrlfの設定が表示さ上書き@Daniel Jompheすることで、この偉大な答え
spankmaster79

1
gitがリポジトリにチェックインされているファイルのいずれかで単に$%#を実行しなかったとしたら、それは非常にすばらしいことです。私は、「これらのどれもが、あなたのファイルのいずれか一つでもバイトを変更しません、SLM、PERFORCE、MSBuildの、ソース・デポ、TFS、SVMで働いていたveはこれはIMO陰湿Gitのハックであり、それは私に多くの痛みを引き起こしています。。
ヴァンスマッコークル2018年

1
チェックアウトで何が起こるかは話の半分にすぎません-ゲット時に何が起こるのですか?チェックアウト時に、行末LFがWindowsであってものままであると言うのは正しいでしょうか?
アンソニー

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.