.gitignoreを編集せずにローカルだけでファイルを無視する方法まとめ

.gitignoreを編集せずにローカルだけでファイルを無視する方法まとめ

.gitignoreを編集せずにローカル環境だけでファイルを無視する方法を紹介します。.git/info/exclude、グローバルgitignore、skip-worktreeの3つの方法を比較し、それぞれの使い分けを整理しました。
2026.06.04

はじめに

チーム開発をしていると、自分だけが使うファイルをGitの管理対象から外したい場面がよくあります。

  • 個人用のメモやTODOファイル
  • IDEのワークスペース設定(.idea/.vscode/settings.jsonなど)
  • ローカル専用のdocker-compose.override.yml
  • デバッグ用のスクリプトやログファイル

こういったファイルを.gitignoreに追加すると、チーム全員のリポジトリに影響してしまいます。「自分のローカル環境だけで無視したい」というニーズに対して、Gitは複数の方法を用意しています。

本記事では、以下の4つの方法を実際に試しながら整理します。

方法 適用範囲 対象 チームへの影響
.gitignore リポジトリ全体 未追跡ファイル あり(コミット対象)
.git/info/exclude ローカルのみ(単一リポジトリ) 未追跡ファイル なし
グローバルgitignore ローカルのみ(全リポジトリ) 未追跡ファイル なし
skip-worktree ローカルのみ(単一リポジトリ) 追跡済みファイル なし

前提環境

  • Git 2.x 以上
  • macOS / Linux / Windows(コマンドは共通)

バージョン確認:

git --version

方法1: .git/info/exclude(単一リポジトリ向け)

すべてのGitリポジトリには、.git/info/excludeというファイルが存在します。このファイルは.gitignoreとまったく同じ書式で動作しますが、.git/ディレクトリの中にあるため、リモートにプッシュされることはありません。

使い方

任意のエディタで.git/info/excludeを開き、無視したいパターンを追加します。

# エディタで開く
vim .git/info/exclude

以下のように記述します。

# 個人用メモ
todo.txt
scratch/

# ローカルのログ出力
logs/

# IDE固有の設定
.vscode/settings.json

.gitignoreと同じ書式なので、ワイルドカード(***)やネゲーション(!)も使えます。

確認方法

# todo.txt を作成して確認
touch todo.txt
git status

todo.txtUntracked filesに表示されなければ成功です。

ポイント

  • .git/ディレクトリ自体がGitの管理対象外なので、チームメンバーに一切影響しない
  • リポジトリごとに設定が必要
  • .gitignoreと同様、まだGitに追跡されていないファイルにのみ有効

方法2: グローバルgitignore(全リポジトリ向け)

.DS_Store(macOS)やThumbs.db(Windows)、*.swp(Vim)など、どのプロジェクトでも無視したいファイルがあります。毎回リポジトリごとに設定するのは面倒なので、グローバルなignoreファイルを設定できます。

設定手順

# 1. グローバルgitignoreファイルを作成
touch ~/.gitignore_global

# 2. Gitに登録
git config --global core.excludesfile ~/.gitignore_global

よくある設定例

# ~/.gitignore_global

# macOS
.DS_Store
.AppleDouble
.LSOverride

# Windows
Thumbs.db
Desktop.ini

# エディタ / IDE
*.swp
*.swo
*~
.idea/
.vscode/

# ログ・一時ファイル
*.log
*.tmp

確認方法

設定が反映されているか確認するには:

git config --global core.excludesfile
# 出力: /Users/<ユーザー名>/.gitignore_global

ポイント

  • マシン上のすべてのGitリポジトリに適用される
  • OS固有のファイルやエディタの一時ファイルに最適
  • ファイル名や配置場所は自由(~/.config/git/ignoreもよく使われる)

方法3: git update-index --skip-worktree(追跡済みファイル向け)

ここまでの2つの方法は、まだGitに追跡されていないファイルにしか効きません。

では、すでにリポジトリにコミットされているファイル(例:config/database.yml.env.example)をローカルで変更したいが、その変更をコミットしたくない場合はどうすればよいでしょうか?

skip-worktreeフラグ

# ローカルの変更をGitに無視させる
git update-index --skip-worktree path/to/file.txt

このフラグを設定すると、Gitはそのファイルのワーキングツリー上の変更を無視します。git statusにも表示されなくなります。

解除方法

# 再びGitの追跡対象に戻す
git update-index --no-skip-worktree path/to/file.txt

現在の設定を確認する

どのファイルにskip-worktreeフラグが設定されているかを一覧表示できます。

git ls-files -v | grep '^S'

Sで始まる行がskip-worktreeが設定されたファイルです。

assume-unchangedとの違い

似たコマンドにgit update-index --assume-unchangedがありますが、用途が異なります。

項目 --skip-worktree --assume-unchanged
本来の用途 ローカルの変更を意図的に無視する パフォーマンス最適化(大規模リポジトリ向け)
Gitの扱い ワーキングツリーの変更を無視する ファイルが変更されていないと仮定する
git reset時の挙動 フラグが維持される Gitがフラグを解除する場合がある
安全性 意図的に使う想定なので安全 Gitが必要に応じて上書きする可能性あり

結論:ローカルの変更を無視したい場合は--skip-worktreeを使いましょう。 --assume-unchangedはあくまでパフォーマンスヒントであり、Gitが自動的に解除することがあります。

実際の使用例

# ローカル用のDB接続設定を変更するが、コミットしたくない
git update-index --skip-worktree config/database.yml

# ファイルを編集
vim config/database.yml

# git status には表示されない
git status
# → nothing to commit, working tree clean

Gitのignore優先順位

Gitは複数の場所からignoreルールを読み込みます。優先順位は以下の通りです(上が最優先)。

  1. コマンドラインパターンgit ls-files等の--excludeオプション
  2. .gitignore(ディレクトリ内) — そのディレクトリとサブディレクトリに適用
  3. .git/info/exclude — リポジトリローカルのexclude
  4. core.excludesfileで指定したファイル — グローバルgitignore

同じファイルに対して複数のルールがマッチする場合、最後にマッチしたパターンが優先されます。また、よりパスが深い.gitignoreのルールがより浅い.gitignoreのルールに優先します。

まとめ

やりたいこと 使う方法
このリポジトリだけで未追跡ファイルを無視したい .git/info/exclude
すべてのリポジトリで共通のファイルを無視したい グローバルgitignore
追跡済みファイルのローカル変更を無視したい git update-index --skip-worktree
チーム全員で同じファイルを無視したい .gitignore(従来通り)

ローカル専用のignore設定を活用することで、.gitignoreを汚さずに自分だけの開発環境を整えることができます。特にskip-worktreeassume-unchangedの違いは把握しておくと、思わぬトラブルを防げます。

参考

この記事をシェアする

関連記事