🏹

Gitコマンド入門::Gitカスタマイズ機能(config,その2)第七十一回

2021/04/06に公開

みなさんこんにちは! 前回に引き続き、git のカスタマイズ機能、config を学習して行きますね。前回はローカルのconfigファイルを設定しましたけど、今日は、グローバル、システムのconfigファイルを編集して行きます!

今日の学習は、こちら!

https://git-scm.com/book/ja/v2/Git-のカスタマイズ-Git-の設定

前回の記事はこちらから!

https://zenn.dev/shiozumi/articles/71b2e0d07ab75d

git本家本元の情報はこちらから!

https://git-scm.com/book/ja/v2

グローバルconfigファイルの存在を確認から!

$ cat /home/shiozumi/.gitconfig

[user]
        name = Makoto Shiozumi
        email = shiozumi@esmile-hd.com
[branch]
        autosetupmerge = true

私のCentOS7.xの環境では、個人のホームディレクトリに、.gitconfig ファイルがあります。

コマンドで確認 git config --list --global

user.name=Makoto Shiozumi
user.email=shiozumi@esmile-hd.com
branch.autosetupmerge=true

前回もコマンドでの確認と、直接ファイル出力も行いましたから、もう、この関連性は慣れてきたと思います。[user] name = 値 -> user.name = 値 ですね!

Win環境は、C:\Users{username}.gitconfig

C:\Users\shiozumi>type .gitconfig
[gui]
        recentrepo = C:/Users/shiozumi/Documents/myTest

C:\Users\shiozumi>

私も、Windows環境では、とくにgitを使っていませんでしたけど、いつの間にかインストールされていましたね。(^▽^;)

それでは、いつもの環境作りから!

$ mkdir func0071 && cd $_

$ git init
Initialized empty Git repository in /home/shiozumi/mygit/func0071/.git/

$ git config --list

user.name=Makoto Shiozumi
user.email=shiozumi@esmile-hd.com
branch.autosetupmerge=true
core.repositoryformatversion=0
core.filemode=true
core.bare=false
core.logallrefupdates=true

git config --list は、--local + --global + --system

本来なら、体系的なものを初回にお伝えする予定でしたけど、gitのコンフィグファイルは、3つ
のレベルがあります。--list のみで実行すると、3つのコンフィグの全ての情報を出力します。

オプション 場所,ファイル名 補足事項 優先順位
--local .git/.config 各リポジトリ毎の設定
--global /home/user-name/.gitconfig 個人別の設定
--system /etc/gitconfig システム内の共通設定

一番の親元は、/etc/gitconfig ファイルです。git config --list --system コマンドで確認できます。

$ git config --list --system
fatal: unable to read config file '/etc/gitconfig':
そのようなファイルやディレクトリはありません

// あちゃ~ いきなりエラーでしたね。(^▽^;)

// ということで、追加してみます!
$ sudo git config --system user.name root
$ sudo git config --system user.email root@localhost

// 無事、ファイルも作成されていますね。
$ cat /etc/gitconfig
[user]
        name = root
        email = root@localhost

// --system のみの表示です。
$ git config --list --system
user.name=root
user.email=root@localhost

// すべてのコンフィグファイルの設定です!
$ git config --list
user.name=root
user.email=root@localhost
user.name=Makoto Shiozumi
user.email=shiozumi@esmile-hd.com

// 中略~

git config --local user.name func0071

ローカルのコンフィグファイルにも、user.name を追加してみましょう!

user.name=root
user.email=root@localhost
user.name=Makoto Shiozumi
user.email=shiozumi@esmile-hd.com

// 中略~

user.name=func0071

これで、user.name は、ローカル、グローバル、システムの3つに設定されましたね。では、早速、コミットして試してみましょう!

$ echo "func0071" > README.md

$ git add README.md

$ git commit -m "1st"
[master (root-commit) cf1537b] 1st
 1 file changed, 1 insertion(+)
 create mode 100644 README.md

// log 確認
$ git log
commit cf1537ba113da152339b11d0a23844ee4a181356 (HEAD -> master)
Author: func0071 <shiozumi@esmile-hd.com>  // <!-- ここ!
Date:   Tue Apr 6 08:50:12 2021 +0900

    1st

Author: func0071 shiozumi@esmile-hd.com

  1. user.name = func0071 で、ローカルの設定が反映されました!
  2. user.email = shiozumi@esmile-hd.com で、グローバルの設定ですね!

ローカルとグローバルの、user.name を削除!

$ git config --local --unset user.name
$ git config --global --unset user.name

$ git config --list
user.name=root  // <!-- /etc/gitconfig に設定された。root のみ!
user.email=root@localhost
user.email=shiozumi@esmile-hd.com

// 中略~

もう一度、2nd コミットしてみます!

$ echo "func0071 2nd" > README.md

$ git add README.md

$ git commit -m "2nd"
[master c16408d] 2nd
 1 file changed, 1 insertion(+), 1 deletion(-)
 
// log 確認
$ git log
commit c16408ddd69e583eee0e439aacfa407c74295e0b (HEAD -> master)
Author: root <shiozumi@esmile-hd.com>  // <!-- ここ!
Date:   Tue Apr 6 08:58:25 2021 +0900

    2nd

commit cf1537ba113da152339b11d0a23844ee4a181356
Author: func0071 <shiozumi@esmile-hd.com> // <!-- ここ!
Date:   Tue Apr 6 08:50:12 2021 +0900

    1st

Author: root shiozumi@esmile-hd.com

  1. user.name = root で、システム全体の設定が反映されました!
  2. user.email = shiozumi@esmile-hd.com 変わらず、グローバルの設定!

まとめ

さあ~ 今回は、ファイルの存在場所の確認と、その優先順位が、実際にどう機能するのか試してみましたけど、みなさんも、是非、お試しください! 尚、--system に、実際にどんな値を入力するのかは、Google検索して調べて見ても、サンプルは少なさそうでしたね。そもそも、私の環境に置いても、最初はファイルが存在しない状態でしたしね~ (^▽^;)

それでは、今回はここまで、お疲れ様でした!

https://zenn.dev/shiozumi/articles/35afddab3f65ce
https://twitter.com/esmile2013

Discussion