すべてのリポジトリで無視したいファイルは、~/.config/git/ignore(~ はホームのフォルダ)に書きます。core.excludesFile を設定しなくても、このファイルは読まれます。次の 1 行で、.DS_Store を足せます。
mkdir -p ~/.config/git && printf '.DS_Store\n' >> ~/.config/git/ignore
効いているかは、リポジトリの中で git check-ignore -v .DS_Store を実行して確かめます。…/.config/git/ignore:1:.DS_Store のように、~/.config/git/ignore の 1 行目が出れば、効いています(… は、ホームのフォルダまでのパスです)。XDG_CONFIG_HOME(設定ファイルの置き場を決める環境変数)を設定しているときは、$XDG_CONFIG_HOME/git/ignore が読まれます。
git check-ignore -v .DS_Store
別の名前のファイルにしたいときだけ、git config --global core.excludesFile で場所を決めます。決めると、既定の ~/.config/git/ignore は読まれなくなります。Git 2.46.0 からは、文書は git config set --global core.excludesFile … を勧めています。手元の Mac の Git 2.39.3(Apple Git-145)では、git config set は通りませんでした。自分の版は git --version で見ます。古い形のコマンドは、次のとおりです。
git config --global core.excludesFile '~/.gitignore_global'
確かめた版は、Docker の Linux の Git 2.54.0 と、手元の Mac の Git 2.39.3(Apple Git-145)です(2026年10月23日に実行しました。最新の 2.56.0 と Windows では実行していません)。ホームのフォルダは、試すために空のフォルダに替えて実行しました。出力の …/home は、その空のフォルダです。出力のパスの頭は … に省きました。
- グローバルな除外の置き場と、何を書くか
- 設定しなくても読まれる場所(
~/.config/git/ignore)と、XDG_CONFIG_HOMEがあるときの場所 core.excludesFileの書き方(古い形と、Git 2.46.0 からの新しい形)- 効いているかの確かめ方
グローバルな .gitignore とは?
この記事では、すべてのリポジトリに効く除外のファイルを、グローバルな .gitignore と呼びます。Git の設定 core.excludesFile は、追跡しないパスのパターンを書いたファイルの場所です。各フォルダの .gitignore と .git/info/exclude に加えて使われます(Git の設定の文書 git-config の core.excludesFile にそう書かれています)。
何を書くかについて、Git の文書は次のように分けています。
- 全員が無視したいものは、
.gitignoreに書いてコミットする(clone で配られる) - そのリポジトリだけで、ほかと共有しなくてよいもの(ひとりの作業のやり方で出る補助のファイルなど)は、
.git/info/exclude - どんなときも無視したいもの(使っているエディタが作るバックアップや一時ファイルなど)は、ふつうは
~/.gitconfigのcore.excludesFileで指すファイルに書く、と文書は書いています。設定しなくても読まれる~/.config/git/ignoreもあります
3 つの置き場の違いと、ぶつかったときの優先の順は、.git/info/exclude の記事にまとめました。
設定しなくても読まれる ~/.config/git/ignore
core.excludesFile の既定の値は、$XDG_CONFIG_HOME/git/ignore です。$XDG_CONFIG_HOME が設定されていないか空なら、$HOME/.config/git/ignore が使われます。GitHub の文書も、どのリポジトリでも無視するには、~/.config/git フォルダの中の ignore というファイルに書くと説明しています(既定で Git は、このファイルに書かれたものを無視します。git フォルダと ignore ファイルが無ければ、作ります)。
次は、core.excludesFile を設定していない環境です(XDG_CONFIG_HOME も設定していません。出力の XDG_CONFIG_HOME=(unset) は、設定していないという表示です。…/home は、この環境のホームのフォルダです)。~/.config/git/ignore に .DS_Store と 1 行だけ書き、リポジトリに .DS_Store・a.swp・main.txt を作りました。
$ echo "HOME=$HOME XDG_CONFIG_HOME=${XDG_CONFIG_HOME-(unset)}"
HOME=…/home XDG_CONFIG_HOME=(unset)
$ git config --global --get core.excludesFile
$ cat ~/.config/git/ignore
.DS_Store
$ git status --short
?? a.swp
?? main.txt
$ git check-ignore -v .DS_Store
…/home/.config/git/ignore:1:.DS_Store .DS_Store
git config --global --get core.excludesFile は何も出さず、終了コード 1 でした(設定が無いということです)。それでも .DS_Store は git status --short に出ず、git check-ignore -v は、~/.config/git/ignore の 1 行目に当たったと答えています。元のファイルが絶対パスで出ています。
Windows では実行していません(~ がどこになるかも確かめていません)。
XDG_CONFIG_HOME を設定しているとき
XDG_CONFIG_HOME を設定すると、$XDG_CONFIG_HOME/git/ignore が読まれ、~/.config/git/ignore は読まれませんでした。XDG_CONFIG_HOME を別のフォルダ(xdg)にして、xdg/git/ignore に *.swp と書いた状態です。.DS_Store は、?? に戻っています。-n を付けた git check-ignore -v で、どの行にも当たらないものは :: の形で出ます。
$ git status --short
?? .DS_Store
?? main.txt
$ git check-ignore -v -n .DS_Store a.swp
:: .DS_Store
…/xdg/git/ignore:1:*.swp a.swp
別のファイルを使うには?(core.excludesFile)
別の名前のファイルを使うなら、core.excludesFile でそのファイルを指します。~/.gitignore_global に *.swp と 1 行書き、そこに向けました。git config --global は、~/.gitconfig に書きます(~/.gitconfig が無く、$XDG_CONFIG_HOME/git/config があるときは、そちらに書きます)。
$ git config --global core.excludesFile '~/.gitignore_global'
$ cat ~/.gitconfig
[core]
excludesFile = ~/.gitignore_global
$ git config --global --get core.excludesFile
~/.gitignore_global
設定の値は、~/ で始めてよい、と文書にあります(~/ は、ホームのフォルダ $HOME に展開、つまり置き換えられます)。上のように引用符で囲んで ~ のまま保存しても、効きました。
設定したあとの git status --short と git check-ignore -v です。既定の ~/.config/git/ignore に書いた .DS_Store は、?? .DS_Store に戻りました。 別の場所を設定すると、既定の場所のほうは効きません。*.swp は、~/.gitignore_global の 1 行目に当たっています。
$ git status --short
?? .DS_Store
?? main.txt
$ git check-ignore -v -n .DS_Store a.swp
:: .DS_Store
…/home/.gitignore_global:1:*.swp a.swp
新しい書き方(Git 2.46.0 から)
Git の文書は、2.46.0 から、git config <名前> <値> の形と、--get・--unset などのオプションは非推奨で、git config set・get・unset に置き換わった、と書いています。新しい形への移行を勧めています。
Git 2.54.0 では、同じ設定を、新しい形で外して入れ直せました。
$ git config unset --global core.excludesFile
$ git config set --global core.excludesFile "~/.gitignore_global"
$ git config get --global core.excludesFile
~/.gitignore_global
$ cat ~/.gitconfig
[core]
excludesFile = ~/.gitignore_global
手元の Mac の Git 2.39.3 では、新しい形が通りませんでした。git config unset … は error: key does not contain a section: unset(終了コード 2)、git config set … は使い方の一覧(終了コード 129)で、終わりました。古い形の git config --global core.excludesFile … は、どちらの版でも通り、2.54.0 でも注意の表示は出ませんでした。自分の版は git --version で確かめてください。
いまの設定を確かめる・外す
いまの設定は、git config --global --get core.excludesFile で見ます。設定が無いときは、何も出さず、終了コード(コマンドが終わるときに返す数)は 1 でした。
$ git config --global --get core.excludesFile
設定があるときは、値が出ます。
$ git config --global --get core.excludesFile
~/.gitignore_global
外すには、古い形の git config --global --unset core.excludesFile が、どちらの版でも通りました(終了コード 0)。外したあとの --get は何も出さず終了コード 1、もう一度外すと何も出さず終了コード 5 でした。無い設定を外そうとすると 5、get は値が無いと 1、と文書にあります。
$ git config --global core.excludesFile '~/.gitignore_global'
$ git config --global --get core.excludesFile
~/.gitignore_global
$ git config --global --unset core.excludesFile
$ git config --global --get core.excludesFile
$ git config --global --unset core.excludesFile
$ cat ~/.gitconfig
新しい形の git config unset --global core.excludesFile は、Git 2.54.0 だけで通りました(Mac の 2.39.3 では通りません)。終了コードは、古い形と同じでした。
$ git config --global core.excludesFile '~/.gitignore_global'
$ git config --global --get core.excludesFile
~/.gitignore_global
$ git config unset --global core.excludesFile
$ git config --global --get core.excludesFile
$ git config unset --global core.excludesFile
$ cat ~/.gitconfig
.DS_Store を全部のリポジトリで無視するには?
~/.config/git/ignore に .DS_Store と 1 行書きます(上の「設定しなくても読まれる」の出力のとおりです)。GitHub の macOS 用のひな形(github/gitignore の Global/macOS.gitignore)も、先頭が # General と .DS_Store です。
github/gitignore の README は、Global フォルダのひな形は、エディタ・道具・OS 向けで、グローバルのひな形に足すか、プロジェクトのひな形に混ぜて使うのを勧める、と書いています。
すでに追跡している .DS_Store は、グローバルな設定を書いても無視されません。追跡をやめる手順は、反映されない原因の記事で説明しています。
効いているか、どう確かめる?
git check-ignore -v ファイル名 で調べます。出力は、「元のファイル:行番号:パターン」と、タブのあとにパスが続く形です。グローバルな設定のファイルは、元のファイルが絶対パスで出ます(上の 2 つの出力のとおり、core.excludesFile を設定していなくても、既定の ~/.config/git/ignore は絶対パスで出ました)。リポジトリの .gitignore や .git/info/exclude は、リポジトリの根からの相対パスで出ます。出力の読み方と終了コードは、書き方の記事にまとめました。
よくある質問
グローバルとリポジトリの .gitignore、どちらに書きますか?
全員が無視したいもの(clone した人にも配りたいもの)は、リポジトリの .gitignore に書いてコミットします。自分だけのもので、ほかのリポジトリでも無視したいものは、グローバルな設定のファイルに書きます。自分だけのもので、そのリポジトリだけでよいなら、.git/info/exclude です。GitHub の文書は、.git/info/exclude に書いた規則はコミットされず、自分の手元のリポジトリだけで効く、と説明しています。違いの詳しい説明は、.git/info/exclude の記事にあります。
core.excludesfile と小文字で書いても同じですか?
Git の文書は、設定の名前は大文字小文字を区別しない、と書いています(core.excludesFile と core.excludesfile は同じ設定)。この記事では、小文字では流していません。
~ から書いても大丈夫ですか?
大丈夫です。パスの設定の値は ~/ で始めてよく、$HOME に展開される、と文書に書かれています。手元では、'~/.gitignore_global' と引用符で囲んで ~ のまま保存しても、効きました。
リポジトリの .gitignore とぶつかったら、どちらが勝ちますか?
リポジトリの .gitignore が勝ちました。.gitignore に !keep.swp、core.excludesFile のファイルに *.swp を書いた環境で、keep.swp は戻り、a.swp は無視されました。
出力では、a.swp は …/home/.gitignore_global:1:*.swp(グローバルな *.swp)に当たり、keep.swp は .gitignore:1:!keep.swp(リポジトリの .gitignore の !keep.swp)に当たっていました。ほかに、.git/info/exclude に notes.md・!x.tmp・/root-only.txt を足した分も調べました。優先の順は、.git/info/exclude の記事にまとめました。
まとめ
- すべてのリポジトリで無視したいものは、
~/.config/git/ignoreに書く。core.excludesFileを設定しなくても読まれる(XDG_CONFIG_HOMEがあれば$XDG_CONFIG_HOME/git/ignore) - 別のファイルにするなら、
git config --global core.excludesFile '~/.gitignore_global'。Git 2.46.0 からはgit config setを文書が勧める。手元の Mac の Git 2.39.3 では古い形だけが通った core.excludesFileを設定すると、既定の~/.config/git/ignoreは読まれなくなる- リポジトリの
.gitignoreは、core.excludesFileのファイルの行に勝つ - 効いているかは
git check-ignore -v。元のファイルが絶対パスで出る - この記事で確かめていないこと: Windows(
~や$HOMEの場所)、Git 2.56.0 での表示、core.excludesfileを小文字で書いたとき
参考資料
- git-config(Git 公式の文書)
- gitignore(Git 公式の文書)
- git-check-ignore(Git 公式の文書)
- Ignoring files(GitHub Docs)
- github/gitignore の README
- github/gitignore の Global/macOS.gitignore
※この記事は、2026年10月23日時点の公式の資料と照らして確かめています。誤りに気づいたらお問い合わせからお知らせください。



