Gitで特定のファイルやディレクトリを無視する方法

Gitでバージョン管理をしていると、無視したいファイルやディレクトリがあると思います。
例えば、自動で作成されるWindowsのThumbs.dbやMacの.DS_Storeが挙げられると思います。また、JavaScript関連のパッケージが格納されたnode_modulesは、いちいち共有してしまうと他の開発者にとっては使わないパッケージが邪魔になります。
そこで、無視したいファイルやディレクトリを指定するための.gitignoreというファイルを作成することで解決できます。
ファイルの作成
まずは.gitignoreという名前でファイルを作成します。
基本的にはリポジトリのルート直下に配置しますが、リポジトリ内であれば複数のディレクトリに配置しても問題ありません。その場合、より深い階層に配置したファイルの設定が優先されます。
なお、これは隠しファイルですので通常はエクスプローラーやFinderには表示されません。
パターンの指定
追跡対象から除外したいファイルやディレクトリの指定の方法を見ていきましょう。除外対象の名前やパスをパターンで指定します。
なお、除外が適用されるのはその.gitignoreが配置されているディレクトリの配下に限定されます。
ファイルやディレクトリを除外する
階層を意識しない場合
以下のように指定すると、ファイルタイプを問わず名前が一致するものが除外されます。どの階層に位置しているかは関係ありません。
target
この場合、名前がtargetとなっているファイルやディレクトリが除外されます。
階層を意識する場合
以下のように指定すると、この.gitignoreを起点とした相対パスに一致するものが除外されます。名前だけが一致していては除外されません。
/target
この場合、.gitignoreが配置されているディレクトリと同じ階層のtargetだけが除外されます。
ディレクトリに限定して除外する
階層を意識しない場合
上述のように名前だけの指定ではファイルタイプを問わないので、以下のように行末に「/」を入れるとディレクトリに限定されるようになります。どの階層に位置しているかは関係ありません。
target/
この場合、名前がtargetとなっているディレクトリが除外されます。
階層を意識する場合
行末だけではなく行頭にも「/」を入れることで、この.gitignoreを起点とした相対パスに一致するディレクトリが除外されます。名前だけが一致していては除外されません。
/target/
この場合、.gitignoreが配置されているディレクトリと同じ階層のtargetだけが除外されます。
特定の拡張子のファイルを除外する
例えばPHPファイルを無視したいなら以下のように指定します。
*.php
「*(アスタリスク)」はすべての文字列に当てはまるワイルドカードですので、この場合は拡張子が「php」ならどのファイルも無視されることになります。階層を意識するかどうかは、先述した行頭の「/」の有無によって変わります。
他にもワイルドカードはありますので、気になる方はご自身でお調べ下さい。
コメントを記述する
以下の書き方はパターンの指定として認識されないので、好きな内容をコメントとして書くことができます。
# この行はコメントです
まとめ
リポジトリ内であっても一部を無視することで、他の端末でクローンする場合に容量が軽くて済みます。ぜひ活用していきましょう。