Gitで特定のファイルを無視する方法の日本語解説
Gitでは、.gitignore
ファイルを使用して、特定のファイルをバージョン管理から除外することができます。これにより、ビルドファイル、キャッシュファイル、一時ファイルなどの不要なファイルをコミットするのを防ぐことができます。
.gitignore
ファイルの作成
- プロジェクトのルートディレクトリに
.gitignore
ファイルを作成します。 - ファイルに無視したいファイルやディレクトリのパスを1行ずつ入力します。
- ワイルドカードを使用できます。
*
: 任意の文字列にマッチします。**
: 任意の文字列やサブディレクトリにマッチします。
- コメントは
#
で開始します。 - ネガティブマッチは
!
で開始します。
例
# ビルドファイル
build/
target/
# キャッシュファイル
.DS_Store
*.swp
# テストファイル
test/
- 既にコミットされたファイルは無視されません。
- サブディレクトリの
.gitignore
ファイルも有効です。 - グローバル
.gitignore
ファイルを作成することもできます。
Gitで特定のファイルを無視する設定例
.gitignore
ファイルに記述するパターンは、ワイルドカードを使って柔軟に設定できます。以下に具体的な例をいくつか紹介します。
特定のファイル名や拡張子の無視
# 特定のファイル名
notes.txt
config.ini
# 特定の拡張子のファイル
*.log # すべてのログファイル
*.swp # Vimの一時ファイル
特定のディレクトリの無視
# buildディレクトリ全体
build/
# tmpディレクトリとその中身
tmp/
特定のディレクトリ内の特定のファイル
# docディレクトリ内の*.docxファイルのみ
doc/*.docx
特定のファイルを除外(ネガティブマッチ)
# docディレクトリ内のすべてのファイルは無視するが、doc/important.txtだけは除外
doc/
!doc/important.txt
特定のパターンにマッチするすべてのファイル
# .aや.oファイル
*.a
*.o
- ワイルドカードの使いすぎは、意図しないファイルを無視してしまう可能性があります。
- ケースセンシティブかどうかは、OSやGitの設定によって異なります。
- 既にコミットされたファイルは、
.gitignore
を設定してもすぐに無視されません。git rm --cached <ファイル名>
でキャッシュから削除してから、再度コミットする必要があります。
- グローバルな
.gitignore
を作成することで、すべてのリポジトリで共通の無視設定を行うことができます。
実用的な例
- IDEの設定ファイル:
.idea
,.vscode
- コンパイル結果:
build
,target
- データベース:
db
- 仮想環境:
venv
- 一時ファイル:
*.swp
,*~
- ローカル設定:
local.settings.json
- .git/info/exclude: リポジトリローカルで無視したいファイルを記述するファイルです。
- git update-index --assume-unchanged <ファイル名>: 特定のファイルを一時的に変更追跡から外すことができます。
.gitignore
ファイルは、Gitでバージョン管理する際に非常に重要なファイルです。適切に設定することで、不要なファイルをコミットしてしまうことを防ぎ、リポジトリをクリーンに保つことができます。
ポイント:
- ワイルドカードを効果的に使いこなす
- ネガティブマッチで例外を扱う
- グローバルな
.gitignore
も活用する - 特定の状況に合わせてカスタマイズする
.git/info/excludeファイル
- 用途: リポジトリローカルで無視したいファイルを指定する。
- 特徴:
.gitignore
よりも優先順位が低い。- リポジトリをクローンした他のユーザーには影響を与えない。
- 通常、チームで共有する必要はない。
git update-index --assume-unchanged <ファイル名>
- 用途: 特定のファイルを一時的に変更追跡から外す。
- 特徴:
- 大きなバイナリファイルなど、頻繁に変更されないファイルを対象とする場合に有効。
git add
してもステージングエリアに追加されない。git reset
で元に戻せる。
git update-index --skip-worktree <ファイル名>
- 用途: 作業ツリーでの変更を無視する。
- 特徴:
git checkout
してもローカルの変更が上書きされない。- 通常、誤って変更してしまうのを防ぐために使用される。
Sparse Checkout
- 用途: 特定のディレクトリやファイルのみをワーキングコピーにチェックアウトする。
- 特徴:
- 大規模なリポジトリで、必要な部分だけを扱う場合に有効。
git sparse-checkout
コマンドを使用する。
Submodules
- 用途: 別のリポジトリをサブディレクトリとして扱う。
- 特徴:
- 独立した管理が可能なサブプロジェクトを組み込む場合に利用する。
- メインのリポジトリから切り離して開発できる。
各方法の比較
git gitignore