はじめに
いろんなリポジトリを見ていたら .gitattributes というファイルを見つけました。
名前から Git 関連のファイルであることは分かりますが、使用用途はいったいなんなのでしょうか。
.gitattributes とは何か
調べたところ、.gitattributes は Git がファイルをどのように扱うかを指定するための設定ファイルでした。
.gitattributes には、主に改行コードの扱い、差分の取り方などの情報を記述します。
例としては以下のようになっています。
* text=auto
この設定があることで、Git が自動的に改行コードを調整し、
OS の違いによる無駄な差分が発生しにくくなります。
そもそも .gitattributes とは
.gitattributes は、Git の追跡対象かどうかを決めるファイルではありません。
Git が 「追跡しているファイルを、どう扱うか」 を決めるための仕組みです。
例えば、次のような構成があったとします。
example-project/
├── src/
│ └── main.js
├── scripts/
│ └── build.sh
├── images/
│ └── logo.png
このとき、以下のように設定できます。
*.js text
*.sh text eol=lf
*.png binary
上から
-
.jsや.shはテキストファイルとして扱う -
.shは改行コードを LF に統一する -
.pngはバイナリファイルとして扱う
といった挙動を Git に指示できます。
では、設定しないとどうなる?
.gitattributes を設定しなくても、 Git は動作します。
しかし、画像ファイルのdiffが表示され見づらくなったり、OSの違いによる改行コードの差分が大量に出るなどの問題が起こる可能性かもしれません。
そのため、特にチーム開発や OSS では .gitattributes を設定しておくことが推奨されているそうです。
.gitignore との違い
.gitignore と .gitattributes は役割が異なります。
.gitignore は Git が追跡しないファイルを指定するもの。
.gitattributes は Git がどう扱うかを指定するものです。
そのため、両者は競合せず、併用されるのが一般的です。