.gitignore をグローバルに設定する方法(~/.config/git/ignore・.DS_Store)

PR
.gitignore をグローバルに設定する方法(~/.config/git/ignore・.DS_Store)
この記事は約13分で読めます。

すべてのリポジトリで無視したいファイルは、~/.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 を小文字で書いたとき

参考資料

※この記事は、2026年10月23日時点の公式の資料と照らして確かめています。誤りに気づいたらお問い合わせからお知らせください。

PR
PR
タイトルとURLをコピーしました