0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

.gitconfigとは?git configとlocal・global・systemの違い

0
Posted at

Gitを使っていると、次のようなコマンドを見かけることがある。

git config --global user.name "Your Name"
git config --global user.email "your@example.com"

また、Git Aliasを設定するときにも、

git config --global alias.st status

のようにgit configを使用する。

では、

  • git configとは何なのか
  • .gitconfigとは何なのか
  • --globalとは何なのか
  • local / global / systemは何が違うのか

を整理する。


まず結論

Gitには、

Gitの動作やユーザー情報などを保存する「設定」がある。

その設定を操作するコマンドが、

git config

である。

そして設定には主に、

system
↓
global
↓
local

という3つのスコープがある。

簡単に言えば、

system
PC全体

global
そのユーザー全体

local
そのGitリポジトリだけ

という違いである。


git configとは?

git configとは、

Gitの設定を確認・追加・変更するためのコマンド

である。

Gitにはさまざまな設定が存在する。

例えば、

ユーザー名
メールアドレス
Git Alias
デフォルトブランチ
エディタ
改行コード関連
認証関連

などである。

例えばGitで使用するユーザー名を設定するなら、

git config --global user.name "Taro"

とする。

メールアドレスなら、

git config --global user.email "taro@example.com"

となる。

つまり、

git config
    │
    └─ Gitの設定を操作するコマンド

と考えればよい。


.gitconfigとは?

.gitconfigとは、

Gitの設定を保存する設定ファイル

である。

例えば、

git config --global user.name "Taro"
git config --global user.email "taro@example.com"
git config --global alias.st status

と設定すると、ユーザー単位のGit設定ファイルには概念的に次のような内容が保存される。

[user]
    name = Taro
    email = taro@example.com

[alias]
    st = status

つまり、

git config
    ↓
設定を変更する

.gitconfig
    ↓
設定内容を保存する

という関係である。

ここは、

git config = コマンド
.gitconfig = 設定ファイル

と区別すると分かりやすい。


.gitconfigの「.」は何?

.gitconfigの先頭には、

.

が付いている。

Unix/Linux系の環境では、名前が.から始まるファイルは通常、隠しファイルとして扱われる。

例えば、

.gitconfig
.bashrc
.zshrc

などがある。

そのため.gitconfigは、

Gitの設定を保存している隠し設定ファイル

という位置づけになる。

WindowsでもGitのユーザー設定として同様のファイルが利用される。


Gitの設定にはスコープがある

ここが重要である。

Gitの設定は、すべて一つの場所に保存されているわけではない。

主に、

system
global
local

という3つのスコープが存在する。

イメージすると、

PC
│
├── system
│ └── PC全体
│
├── User A
│ └── global
│ └── User A全体
│
└── Git Repository
    └── local
        └── このリポジトリだけ

となる。


systemとは?

systemは、

そのPC・システム全体に適用されるGit設定

である。

設定する場合は、

git config --system...

とする。

例えば、

git config --system core.autocrlf true

のような形である。

system設定は、そのマシンを使用する複数ユーザーに影響する可能性がある。
そのため、通常の個人利用で頻繁に変更するものではない。
権限によっては管理者権限が必要になる。


globalとは?

globalは、

現在のユーザー全体に適用されるGit設定

である。

例えば、

git config --global user.name "Taro"

とすると、そのユーザーが扱うGitリポジトリで基本的にこの設定が使われる。

よく設定するものとして、

git config --global user.name "Taro"
git config --global user.email "taro@example.com"

がある。

Git Aliasも、

git config --global alias.st status

としてglobalに設定することが多い。

なぜなら、

git st

を特定のリポジトリだけではなく、普段使うさまざまなリポジトリで利用したいからである。


localとは?

localは、

現在のGitリポジトリだけに適用される設定

である。

例えば、

git config --local user.email "work@example.com"

とすると、そのリポジトリだけで、

work@example.com

というメールアドレスを使用できる。

--localは省略することもできる。

Gitリポジトリ内で、

git config user.email "work@example.com"

と設定すれば、基本的にはlocal設定として扱われる。

local設定はリポジトリ内の、

.git/config

に保存される。

ここはglobalとの違いとして重要である。

global
↓
ユーザーのGit設定ファイル
例:~/.gitconfig


local
↓
そのリポジトリの設定ファイル
.git/config

localはどんなときに使う?

例えば、

個人開発
↓
personal@example.com

仕事
↓
work@example.com

のようにGitのメールアドレスを使い分けたい場合がある。

普段は、

git config --global user.email "personal@example.com"

としておく。

仕事用リポジトリだけ、

git config --local user.email "work@example.com"

と設定する。

すると、

global

personal@example.com
│
├── 個人Repository A
│ → personal@example.com
│
├── 個人Repository B
│ → personal@example.com
│
└── 仕事Repository
│
    └── local
        work@example.com

という使い分けができる。


system・global・localが全部設定されていたら?

ここで疑問になるのが、

同じ設定がsystem・global・localすべてに存在したらどうなるのか?

という点である。

基本的には、より限定的な設定が優先される。

local
  ↑
global
  ↑
system

つまり、

local > global > system

と考えればよい。


なぜlocalの方が強いのか?

例えばsystemで、

user.name = SystemUser

globalで、

user.name = Taro

localで、

user.name = WorkTaro

となっていたとする。

このリポジトリでは、

WorkTaro

が使われる。

理由はlocal設定が、

このリポジトリでは、この設定を使いたい

という、より具体的な指定だからである。

考え方としては、

system
「このPCではこれを使う」

        ↓

global
「でも、このユーザーではこれを使う」

        ↓

local
「でも、このRepositoryではこれを使う」

となる。

対象範囲が狭い設定ほど、その場所に対して具体的な指定になるため、優先される。


実際にどの設定が使われているか確認する

例えば現在のユーザー名を確認するなら、

git config user.name

メールアドレスなら、

git config user.email

とする。

すべての設定を見るなら、

git config --list

を使える。


「どのファイルから来た設定なのか」も確認できる

設定が増えてくると、

このuser.email、globalなのかlocalなのか分からない

ということがある。

その場合、

git config --list --show-origin

とすると、設定値だけでなく、その設定がどこから読み込まれたのか確認できる。

イメージとしては、

file:/home/user/.gitconfig       user.name=Taro
file:/home/user/.gitconfig       user.email=personal@example.com
file:.git/config                 user.email=work@example.com

のようになる。

この場合、

global
personal@example.com

        ↓ localで上書き

local
work@example.com

となっていることが分かる。

設定トラブルを調べるときに便利なコマンドである。


Git Aliasも同じ仕組み

前の記事で扱ったGit Aliasも、実はこのGit Configの仕組みを利用している。

例えば、

git config --global alias.st status

は、

global設定として

alias.st = status

を登録する

という意味である。

ユーザーのGit設定を見ると、

[alias]
    st = status

のような設定になっている。

つまりGit Aliasだけ特別な仕組みが存在するわけではない。

Git Config
│
├── user.name
├── user.email
├── core.editor
├── alias.st
├── alias.co
└── その他多数

というGit設定の一つとしてAliasも存在している。


.gitと.gitconfigは違う

名前が似ているので注意したい。

.gitconfig

.git/

は別物である。

.gitconfigは、

Gitの設定ファイル

である。

一方、

.git/

は、

そのディレクトリをGitリポジトリとして管理するための情報を保存する場所

である。

例えば、

my-project/
│
├── src/
├── README.md
│
└── .git/
    ├── config
    ├── HEAD
    ├── objects/
    └── refs/

のようになっている。

そしてlocal設定は、

.git/config

に保存される。

整理すると、

.gitconfig
│
└── 主にユーザー単位のGit設定


.git/
│
├── Gitリポジトリそのものの管理情報
│
└── config
    └── このRepositoryのlocal設定

となる。


全体をつなげる

ここまでを一つにつなげると、Gitの設定は次のような構造になっている。

Git
│
├── git config
│      │
│      └── Gitの設定を操作するコマンド
│
└── Configuration
    │
    ├── system
    │     └── PC・システム全体
    │
    ├── global
    │     └── ユーザー全体
    │          └── ~/.gitconfig など
    │
    └── local
        └── Repository単位
            └── .git/config

そして同じ設定が複数存在する場合は、基本的に、

local
↓ 優先
global
↓
system

となる。


まとめ

git configとは、

Gitの設定を操作するためのコマンド

である。

.gitconfigとは、

Gitの設定を保存する設定ファイル

である。

さらにGitの設定には主に3つのスコープがある。

スコープ 対象 代表的な用途
system システム・PC全体 マシン共通設定
global ユーザー全体 名前、メール、Aliasなど
local 特定のRepository プロジェクト固有設定

優先順位は基本的に、

local > global > system

となる。

例えば、

git config --global alias.st status

というコマンドも、

git config
↓
Gitの設定を変更
↓
--global
↓
ユーザー全体を対象にする
↓
alias.st
↓
stというAliasの設定
↓
status
↓
設定する値

と分解すると理解しやすい。

Git Alias、ユーザー名、メールアドレスなどはバラバラの機能に見えるが、実際には、

Gitが持っているConfiguration(設定)の仕組みをgit configから操作している

という一つの仕組みにつながっている。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?