.gitignoreとは?
.gitignoreはGitの管理下で無視するファイルやディレクトリを指定するためのファイルです。
つまり、Gitの管理下に置きたくないファイルやディレクトリを指定するためのファイルです。
例えば、以下のような.gitignoreファイルを作成したとします
# 一時ファイル
*.log
# コンパイル結果
/build/
# OS特有のファイル
.DS_Store
Thumbs.db
この設定により、以下のファイルやディレクトリがGitによって無視されます
- 拡張子が.logの全てのファイル
- buildディレクトリおよびその中の全てのファイル
- .DS_StoreやThumbs.dbといったOSが自動生成するファイル
基本構文
.gitignoreは簡単な構文に基づきます。一見しただのテキストファイルのようですが、強力なパターンマッチ機能を持っています。
ワイルドカードの使用
-
*
は任意の文字列にマッチする- .logという拡張子のファイルを全て無視したい場合
*.log
と書けばまとめて無視できる。(*は任意のテキスト)
- .logという拡張子のファイルを全て無視したい場合
-
?
は任意の1文字にマッチする- 例: file?.txt → file1.txtやfileA.txtは無視されるが、file10.txtは対象外になる
-
/
を末尾につけると特定のディレクトリ全体を無視できる- 例: build/ → buildディレクトリ内の全ての内容を無視できる
-
/
を先頭につけるとリポジトリのルートからのパスを指定できる- 例: /config/settings.json → リポジトリ直下のconfig/settings.jsonを無視できる
-
!
を先頭につけると、無視しない例外を指定できる- 例: !important.log → 他の.logファイルは無視されても、このファイルは対象外
-
*
と一緒に使うことが多い
コメントの追加
「#」以降はすべてコメントとして扱われて無視されます。
# これはコメント
練習問題
以下の.gitignore設定では、どのファイルが無視され、どれが追跡されるか考えてみます
*.bak
/logs/
!/logs/keep.log
下記ファイルは無視されるorされないを考えましょう
- backup.bak
- logs/error.log
- logs/keep.log
正解はこちら(トグル)
- backup.bak → *.bakがあるため無視される - logs/error.log → /logs/があるので無視される - logs/keep.log → !/logs/keep.logがあるので無視されない実践的なポイント
よく使われるパターンの例
# 一時ファイル
*.tmp
*.swp
# ビルド結果
/dist/
/build/
# Railsプロジェクト関連
/log/
/tmp/
/public/assets/
.byebug_history
# Node.js関連
/node_modules/
npm-debug.log*
yarn-debug.log*
yarn-error.log*
他にもGitHubは複数の.gitignoreテンプレートを提供しています。
言語やフレームワークごとのテンプレートが揃っています。
注意点
.gitignoreを追加または変更した場合、既に追跡されているファイル、ディレクトリには影響しません。
そのため、追跡を解除したい場合は以下のコマンドを実行します.
$ git rm --cached <file>
$ git rm --cached -r <path/to/directory>
これにより、指定したファイル・ディレクトリはGitの追跡対象から外れ、次回のコミットでリポジトリから削除されます。(ローカルにはファイルが残ります。)
あと、秘密鍵だけは絶対にコミットに含めないようにしましょう
まとめ
.gitignoreはGitの効率的な利用に必須のツールです。その正しい利用により,プロジェクトの済み分けを保ち,他のメンバーやプロダクション運用の効率を向上させることができます。
個人開発でも最初に.gitignoreを作ることをオススメします。何を書けば良いか分からない時は前述のテンプレートを参考にしましょう☝️
読んでいただきありがとうございました!
参考記事