.gitattributes に関するメモ
きっかけ
-
composer
で Laravel のプロジェクトを自動生成した時に、.gitattributes
ファイルができていた -
npx create-nuxt-app
で Nuxt.js のプロジェクトを自動生成した時には、.gitattributes
ファイルが無い事に気付いた -
.gitattributes
ファイルが無いと、どういう困った事が起こるんだろう
と思って、軽く調べたのでメモを残しておきます。
Laravel プロジェクトで自動生成された .gitattributes
です。これを元に説明をしていきます。
* text=auto
*.css linguist-vendored
*.scss linguist-vendored
*.js linguist-vendored
CHANGELOG.md export-ignore
TL;DR
- 特定ファイルやディレクトリ、拡張子毎に、
git
操作をカスタマイズするためのファイル- バイナリファイルの diff を表示する
- 改行文字の扱いを設定する
- Linguist の扱いを設定する
少しだけ詳しく
.gitattributes
を使うことで、ファイルやディレクトリに対して git
の操作を色々と設定する事ができます。
例えば、 特別に設定をしていないとバイナリファイルの diff は下記のように表示されます。
$ git diff
diff --git a/image.png b/image.png
index ba5557e..f2da45c 100644
Binary files a/image.png and b/image.png differ
バイナリファイルの diff を表示する挙動を変える事で、次のような表示に変えて分かりやすくできます。この方法は こちら にあります。
diff --git a/image.png b/image.png
index ba5557e..f2da45c 100644
--- a/image.png
+++ b/image.png
@@ -1,11 +1,11 @@
ExifTool Version Number : 12.00
-File Name : JygOeq_image.png
-Directory : /var/folders/bg/kgh56f89493csw1t4_0h7sfm0000gn/T
+File Name : image.png
+Directory : .
File Size : 760 kB
-File Modification Date/Time : 2020:12:07 02:09:13+09:00
+File Modification Date/Time : 2020:12:07 02:06:03+09:00
File Access Date/Time : 2020:12:07 02:09:13+09:00
-File Inode Change Date/Time : 2020:12:07 02:09:13+09:00
-File Permissions : rw-------
+File Inode Change Date/Time : 2020:12:07 02:06:03+09:00
+File Permissions : rw-r--r--
File Type : PNG
File Type Extension : png
MIME Type : image/png
@@ -16,5 +16,6 @@ Color Type : RGB with Alpha
Compression : Deflate/Inflate
Filter : Adaptive
Interlace : Noninterlaced
+Warning : Corrupted PNG image
Image Size : 1201x667
Megapixels : 0.801
ここからは、最初にある .gitattributes
について説明していきます。
text=auto
Git がテキストファイルと判定したら、改行コードを変換する設定になります。Windows と Mac, Linux など色々な環境で作業する場合、改行コードの違いで余計な差分が発生します。
そうなると PR のレビューがしにくかったり、コミットが汚くなってしまうので改行コードを自動で Git が変換してくれます。
linguist-vendored
linguist は、リポジトリでどの言語で書かれているか調べるライブラリの事です。
Laravel プロジェクトの場合は、ほとんどが PHP ファイルになりますがフロントエンドに JavaScript や CSS, Vue などが使われます。
複数の拡張子が存在する事で、linguist が間違った言語認識をする可能性があります。これを防ぐために、言語統計に含めたくないファイルを linguist-vendored
で設定できます。
export-ignore
git archive
する時に、アーカイブ対象に含めないようにする設定です。例にある CHANGELOG.md
や .gitignore
などがそれに当たると思います。
Discussion