Open1

git configについて

TaiyoTaiyo

git configの深掘り

git configとは?

git config は、Gitの設定を管理するためのコマンドです。このコマンドを使うことで、ユーザー名やメールアドレス、エイリアス、リポジトリ固有の設定、さらにはエディタや差分ツールの設定など、さまざまな設定を行うことができます。

git config --list

git config --listで今現在どんな設定がされているかを見ることができる

git config --list
yamamototaiyou@yamamotyounoAir git_tutorial % git config --list
credential.helper=osxkeychain
user.name=
user.email=
filter.lfs.clean=git-lfs clean -- %f
filter.lfs.smudge=git-lfs smudge -- %f
filter.lfs.process=git-lfs filter-process
filter.lfs.required=true
alias.ci=commit
alias.st=status
alias.br=branch

configの範囲について

  1. --global
  • ユーザー単位での設定で、全リポジトリに適用されます。
  • 通常、ホームディレクトリにある .gitconfig ファイルに保存されます。
  • 例: ユーザー名、メールアドレス、エディタなど。
  1. --system
  • システム全体での設定です。すべてのユーザーとリポジトリに影響します。
  • 通常、/etc/gitconfig に保存されます。
  • 例: システム全体で使う設定(例:グローバルのGitの設定、管理者設定など)。
  1. --local
  • リポジトリ単位の設定です。リポジトリ固有の設定を行います。
  • 通常、リポジトリの .git/config に保存されます。
  • 例: 特定のリポジトリ内で使う設定(例:リモートリポジトリのURL)。
  1. --worktree
  • 特定のワークツリー(作業ツリー)に関連した設定です。主に複数の作業ツリーがある場合に使用します。
  • このオプションはあまり一般的には使われませんが、Gitの作業ツリー(git worktree コマンドを使って複数の作業ツリーを管理する場合)に関連します。
  • 例: 特定の作業ツリーに対する設定。

https://qiita.com/C_HERO/items/c35e679f0b03a5f06469

設定の優先順位

設定は、上から下に向かって優先度が高い順に適用されます。つまり、設定が重複している場合、以下のように適用されます:
1. --worktree: 最も優先されます(作業ツリー固有の設定)。
2. --local: リポジトリ単位の設定が適用されます。
3. --global: ユーザー単位の設定が適用されます。
4. --system: システム全体の設定が適用されます。

したがって、もしリポジトリ固有の設定とユーザー全体の設定が衝突する場合、リポジトリ固有の設定(--local)が最優先されます。

--show-origin

git config --listでは設定がglobalであるかわかりません。なのでoptionをつけることで確認ができます。

git config --list --show-origin
base) yamamototaiyou@yamamotyounoAir git_tutorial % git config --list --show-origin
file:/opt/homebrew/etc/gitconfig        credential.helper=osxkeychain
file:/Users/yamamototaiyou/.gitconfig   user.name=
file:/Users/yamamototaiyou/.gitconfig   user.email=
file:/Users/yamamototaiyou/.gitconfig   filter.lfs.clean=git-lfs clean -- %f
file:/Users/yamamototaiyou/.gitconfig   alias.st=status
file:/Users/yamamototaiyou/.gitconfig   alias.br=branch
file:/Users/yamamototaiyou/.gitconfig   alias.co=checkout
file:.git/config        core.repositoryformatversion=0
file:.git/config        core.filemode=true
file:.git/config        core.bare=false
file:.git/config        core.logallrefupdates=true