.gitignoreの概要
.gitignore とは、Gitによる履歴管理において 「追跡対象外」を指定する設定ファイルです。
主にリポジトリ直下に配置して使用し、ファイルやフォルダを指定するパターンを記述することで、
Git が指定パターンにマッチするファイルを 追跡対象から除外 します。
不要なファイルを追跡対象から外すことで、データ量低減と履歴確認の効率化が期待できるほか、
セキュリティ上の理由から共有を避けたい機密情報を保護する役割があります。
除外対象
.gitignore で除外対象とするファイルは、主に以下のようなものになります。
| 除外対象 | 例 | 除外理由 |
|---|---|---|
| ソースによる生成ファイル | ・ビルドパッケージ ・キャッシュ、ログなど | ソースがあれば再生成が可能 |
| 依存パッケージ類 | ・node_module(npm/yarn) ・.venv (python仮想環境) | 依存関係リストががあれば再現可能 (package.json, requirements.txt 等) |
| 環境依存のファイル | ・OSやエディタ用の設定ファイル | チームでの共有が不要 |
| 機密情報を含むファイル | ・APIキーの管理ファイル等 | セキュリティリスク |
要約すると、「再現可能なもの」、「個人/環境依存」、「機密情報」 は基本的に除外対象とすることが多いです。
使用方法:
基本的な使用の流れは以下の通りです。
.gitignoreファイルをリポジトリのルート(または任意のサブディレクトリ)に配置- 除外したいファイル/フォルダの指定パターンを記述
- Git が指定パターンにマッチするファイルを 追跡対象から除外
.gitignoreファイルの作成/配置
.gitignoreを適用するフォルダ(主にリポジトリルート)直下に .gitignore を作成します
if not exist .gitignore echo. > .gitignore(→コマンドプロンプトの例。上書き防止のため、存在確認をしています)
除外対象の記述
作成した.gitignoreファイルを開き、以下のように除外対象を記述していきます。
(下記はあくまでサンプルです)
例:
# ビルド成果物
dist/
build/
# ログファイル
*.log
# 環境依存の設定ファイル
.env
.DS_Store
Thumbs.db
# node_modules ディレクトリを無視
node_modules/基本的な記述パターン
以下に、よく使用する基本的な記述パターンを簡単にまとめます。
| パターン | 記述方法・説明 | 例 |
|---|---|---|
| 名称一致 | 名称をそのまま記述。(フォルダは末尾に/)※.gitignore配下で名称が一致すれば、すべて対象 | test.txtdir_A/ |
| 相対パス指定 | .gitignoreの位置を基準として、相対パスを記述 | /test.txt/dir_A/test.txt |
| 特定の拡張子 | ワイルドカード* を使用し、*.<拡張子> で記述 | *.log |
| 例外 | 先頭に ! を付与。除外対象の例外指定。一括除外→特定ファイルの取り出し の手順で使用 | *.log!test.log |
| コメント | 文頭に # 。解釈されないので説明に使用 | # これはコメント |
| エスケープ | \ の付与。何らかの記法と名称が干渉する場合に使用 | \#test.txt |
他の記法やより詳細な解説は以下ドキュメントページが参考になります。
- https://git-scm.com/docs/gitignore/ja
- https://www.atlassian.com/ja/git/tutorials/saving-changes/gitignore
使用時の注意点
.gitignoreを適用する際は、以下のポイントを押さえておく必要があります。
- 除外できるのは、ワークツリーに未登録のファイルのみ
→登録済みを除外したい場合は、一度「git rm --cached」で削除が必要(後述) - .gitignoreの影響範囲は配置位置の配下のみ(親要素の設定は不可)
- 複数ディレクトリに配置した場合、深い階層にあるもので設定が上書きされる
トラブルシューティング
最後に、.gitignoreを使用するにあたって躓くポイントと解決方法をまとめていきます。
(追加があれば、適宜更新していきます。)
登録済み要素の除外設定
既に追跡対象として登録済みのファイル、ディレクトリを.gitignoreで無視するように設定し直したい場合は、git rm --cached を使用して以下のように対応します。
※--cached は、実ファイルを削除せずにリポジトリの追跡対象から外すためのオプションです。
ファイルの場合:
git rm --cached <ファイルパス>ディレクトリの場合:-r オプションを付与してディレクトリ内を再帰的に処理します
git rm --cached -r <ディレクトリのパス>上記対応後、.gitignoreを編集して再度コミットすれば、除外対象の設定が有効になります。
一部ファイルを除き、特定ディレクトリの全ファイルを除外
特定のディレクトリから一部のファイルのみを追跡対象としたいような場合は、以下のような書き方をする必要があります。
/dir/*
!/dir/これは追跡したい.txt
!/dir/これは追跡したい2.txtポイントになるのは/dir/* の部分で、ここを/dir/ で指定してしまうと例外が設定できません。
これは、Gitのパフォーマンス上の理由で、ディレクトリを無視する記述をした場合、そこに含まれる要素を例外設定できないという制限があるためです。
