gitの設定のレベルについて(system/global/local/worktree)

2021.08.15
gitの設定のレベルについて(system/global/local/worktree)

Gitの設定ファイルgitconfigには種類があり、影響する範囲がそれぞれのレベルによって違います

検証した環境

1 git 2.32.0

gitconfigの種類

設定出来るレベルは4段階あり、

それぞれ設定するファイル・影響範囲などが異なります。



レベル設定ファイル範囲影響範囲の広さ優先度
system/usr/local/etc/gitconfig

(OSやバージョンによって変わる)

システム全体14
global~/.gitconfigユーザ全体23
localリポジトリの
.git/config
該当リポジトリ32
worktreeリポジトリの
.git/config.worktree
該当リポジトリの該当worktree41





影響範囲は system > global > local > worktree の順で、

仮に全てを設定した場合の優先される順は影響範囲の逆順になります。



例えば以下のケースの場合、影響範囲は global > system のため

設定したユーザは同じstというaliasがあったとしても "status -s" が優先されます。

# 全ユーザ共通でaliasを設定
$ git config --system alias.st status

# 自ユーザでは↑のaliasの設定を変更(優先度が global > system のため)
$ git config --global alias.st "status -s"



一般的に使用する設定レベルについて

1番よく利用されるのは global~/.gitconfig

いわゆる gitconfig と呼ばれるgitの設定ファイルがこれですね。


そしてプロジェクトやチームによってプラスで local.git/config に設定を加える、

という事が多いイメージです。



よく使われる2つ↓

レベル設定ファイル範囲影響範囲の広さ優先度
global~/.gitconfigユーザ全体23
localリポジトリの
.git/config
該当リポジトリ32

利用ケース

利用ケースとして、



globalにはそのマシンでメインとなるGitHubのアカウントの名前・メールアドレスを登録しておき、

$ git config --global user.name "プライベート用の名前"
$ git config --global user.email "xxx@gmail.com"

localには該当リポジトリの会社用のGitHubのアカウントの名前・メールアドレスを登録する

$ git config --local user.name "会社用の名前"
$ git config --local user.email "xxx@company.jp"

こうする事でこのリポジトリでのコミットは xxx@company.jp の人のものとして扱われます。



利用ケースと偉そうに書いておきながら、↑の使い方以外で使った事がないという...😅w





余談

この記事を書いてて知ったのですが、使い道が難しそうなworktreeというレベルもあります 🤔

Git - git-config Documentation


worktreeは他の記事で見かけないので、最近のgitのバージョンで増えたのかもしれませんね。

おすすめ