Gitの設定ファイルgitconfigには種類があり、影響する範囲がそれぞれのレベルによって違います
検証した環境
| 1 | git | 2.32.0 |
gitconfigの種類
設定出来るレベルは4段階あり、
それぞれ設定するファイル・影響範囲などが異なります。
| レベル | 設定ファイル | 範囲 | 影響範囲の広さ | 優先度 |
|---|---|---|---|---|
| system | /usr/local/etc/gitconfig | システム全体 | 1 | 4 |
| global | ~/.gitconfig | ユーザ全体 | 2 | 3 |
| local | リポジトリの.git/config | 該当リポジトリ | 3 | 2 |
| worktree | リポジトリの.git/config.worktree | 該当リポジトリの該当worktree | 4 | 1 |
影響範囲は 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 | ユーザ全体 | 2 | 3 |
| local | リポジトリの.git/config | 該当リポジトリ | 3 | 2 |
利用ケース
利用ケースとして、
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のバージョンで増えたのかもしれませんね。