.gitattributes は「このファイルはこう扱ってね」のメモ書き
Gitを使っていると、リポジトリの中に .gitattributes という名前のファイルを見かけることがあります。名前が .gitignore に似ているので混同されがちですが、役割はまったく違います。
.gitignore が「このファイルは追跡しなくていいよ」という無視リストなのに対して、.gitattributes は「このファイルはこういう性質のものだから、こう扱ってね」という指示書です。
宅配便で例えると分かりやすいかもしれません。段ボールに貼る「われもの注意」「天地無用」「冷蔵」といったシールを想像してください。荷物そのものは変わらないけれど、シールがあることで配送業者の扱い方が変わりますよね。.gitattributes はまさにそのシールで、ファイルの中身は変えずに、Gitがそのファイルをどう処理するかを変えます。
どんなときに使うのか
典型的なのは「改行コード」の問題です。WindowsとMac/Linuxでは、テキストファイルの改行の表し方が違います。何も設定しないままチーム開発をすると、誰かがファイルを開いて保存しただけで「全行が変更された」という悲惨な差分が発生することがあります。実際これ、初めて遭遇すると何が起きたのか分からなくてかなり焦ります。
.gitattributes で改行の扱いを統一しておくと、こうした事故を防げます。
もうひとつよくあるのが「バイナリファイル」の扱いです。画像やフォント、ZIPのようなファイルは、Gitが親切心で差分を計算しようとしても意味のある結果になりません。「これはバイナリだから差分を出さなくていい」と教えてあげるのも .gitattributes の役目です。
書き方の基本
1行につき「ファイルのパターン」と「属性」をスペースで区切って書きます。パターンの書き方は .gitignore と似ていて、*.png のようなワイルドカードが使えます。
# すべてのテキストファイルの改行を統一する
* text=auto
# シェルスクリプトはLF固定
*.sh text eol=lf
# 画像はバイナリとして扱う
*.png binary
*.jpg binary
# で始まる行はコメントです。設定の意図をメモしておくと、後から見た人(半年後の自分を含む)が助かります。
置き場所
普通はリポジトリのルート(一番上の階層)に .gitattributes という名前で置きます。.gitignore と同じで、先頭のドットを忘れないでください。サブディレクトリに置くこともでき、その場合はそのディレクトリ以下に対して効きます。
そして大事なのが、このファイル自体もコミットして共有するという点です。設定をリポジトリに含めるからこそ、チーム全員の環境で同じルールが適用されます。個人の環境設定ではなく、プロジェクトのルールとして扱うものだと考えてください。
.gitignore との違いを整理
| .gitignore | .gitattributes | |
|---|---|---|
| 目的 | ファイルを追跡対象から外す | ファイルの扱い方を指定する |
| 対象 | 管理したくないファイル | 管理しているファイル |
| たとえると | 「持ち込み禁止リスト」 | 「取扱注意のシール」 |
名前が似ているせいで「どっちに何を書くんだっけ」となりがちですが、ignore は入れない話、attributes は入れたものの扱いの話と覚えておけば混乱しません。
最初はどこまでやればいい?
正直、個人の小さなプロジェクトなら .gitattributes がなくても困らないことが多いです。ただ、複数人が違うOSで作業し始めた瞬間に改行問題が顔を出すので、チーム開発が視野に入ったら早めに用意しておくと後が楽になります。
まずは * text=auto の1行だけ書いたファイルを置いてみる、くらいの気軽さで始めて構いません。必要になったときに行を足していけば十分です。
このページは役に立ちましたか?