search
LoginSignup
26

More than 1 year has passed since last update.

posted at

updated at

[Git]これだけ押さえる!gitconfigの基本

gitconfigについて、押さえておきたい内容をまとめました。
具体的には、system, global, localの違いに関する内容になっています。

gitconfigのレベル

gitconfigには、system, global, localの大きく分けて3つのレベルがあります。
それぞれの基本的な情報は以下の通り。

適用範囲 設定ファイルの場所 設定コマンド(git config)のオプション
system システム上の全ユーザーの全リポジトリ /etc/gitconfig --system
global 使用ユーザー ~/.gitconfigまたは~/.config/git/config --global
local 設定したリポジトリ .git/config(設定したリポジトリ内) --localまたはなし

補足事項

上記だけではわかりにくい箇所もあるので、いくつか補足事項を。

globalは、git config --globalの設定をしたユーザーを使用している時に適用されます。

localは、設定をしたリポジトリで適用されます。
後続の「優先順位」にも関連しますが、操作しているリポジトリで、.git/configに設定があった場合、どのユーザーで操作をしてもその値が適用されます。
localは、オプションなしで設定ができますが、Git管理化していないディレクトリで実行するとエラーになるので、注意しましょう。

優先順位

優先順位は、system < global < localです。

公式サイトの8.1 Git のカスタマイズ - Git の設定によれば、/etc/gitconfig(systemの設定ファイル) → ~/.configまたは~/.config/git/config(globalの設定ファイル), 使用中のリポジトリの設定ファイル(.git/config:localの設定ファイル)の順に読み込まれ、後から読んだ値がその前の値を上書く、すなわち、優先されるとあります。

試しに、とあるユーザーで、system, globalを設定し、localの設定をしたリポジトリで設定状況を見てみましょう。
git configに、--listを付けて実行します。

$ git config --list
# system(/etc/gitconfig)の設定値
user.name=hoge
user.email=hoge@example.com
# global(~/.config)の設定値
user.name=fuga
user.email=fuga@example.com
# local(.git/config)の設定値
core.repositoryformatversion=0
core.filemode=true
core.bare=false
core.logallrefupdates=true
user.name=piyo
user.email=piyo@example.com

実際は出力されませんが、分かりやすくするため、「#」でコメントを入れました。
この設定だと、複数あるuser.nameとuser.emailは、一番下(後)に表示されている(読み込まれている)user.name=piyo, user.email=piyo@example.comが優先されます。

今手を加えているリポジトリで適用される設定を知りたい場合は、このgit config --listを使って確認するとよいですね。

なお、gitのcオプション(-c)を使えば、そちらで指定された値が適用されます(設定ファイルの値を上書きます)。

gitのcオプション(-c)も加味すると、優先順位は、
system < global < local < gitのcオプション(-c)
となりますね。

実行コマンド

以下に、各々の設定時の実行コマンドの例を挙げてみました。
user.nameと、user.emailを設定する内容にしています。
※git -cのみ、コミット時のコマンドにしています。

-- system
git config --system user.name "hoge"
git config --system user.email hoge@example.com

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

-- local
git config --local user.name "piyo"
git config --local user.email piyo@example.com

-- git -c
git -c user.name="bar" -c user.email=bar@example.com commit -m "test"

使い分けについて

system

システム上の全ユーザーの全リポジトリに適用されるが、最も優先度の低くなるsystem。
使うとしたら、以下のような場合でしょうか。

  • システム全体で、Git用ユーザーを統一したい場合
  • 所謂ゲストユーザーでGitを使用する場合

前者はあまりなさそうですが、後者ならありえそう??
ユーザーのgitconfigの設定(global)がない状態で、コミットしようとするとエラーになるので、それを防ぐための応急処置策としてよさそうです。

global

最もメジャーな設定ですね。

  • 個人用PCのメインGitアカウント
  • サーバのアカウントを個別で付与されている場合

個別のアカウントが割り当てられているなら、とりあえずはこの設定をしておけばよいでしょう。

local

localは以下の通りでしょうか。

  • 個人用PCのサブGitアカウント
  • 共用のサーバアカウントを使っていて、サーバ上に個人環境を構築する場合

メジャーなのは前者ですかね。複数のアカウントを使い分けている場合に使えそうです。
後者は現場にもよると思いますが、該当するなら、対象のGitリポジトリにlocal設定を行うとよいですね。

git -c

最後に、いちばん優先度の高いgit -c。
こちらは使うとしたら、以下のような場合でしょうか。

  • 普段はデプロイだけのサーバで少しだけ修正したい場合
  • 他者の個人環境にて、手を加える場合

使用頻度は低そうですが、覚えておくと、いざという時に便利。

終わりに

普段あまり気にすることではないけれど、だれが編集したのか?正確に把握するためにも、正しく設定を使い分けたいところ。

参考

特に使い分けについては、以下の記事を大いに参考にさせていただきました!

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
What you can do with signing up
26