リポジトリ単位でGitのユーザー名とメールを設定する

/

リポジトリ単位でユーザーを設定したい

あるGitのリポジトリで普段使っているユーザ名やアドレスとは別のものを使いたかったので、プロジェクトのリポジトリ単位でユーザーの設定をしてみました。

ユーザー設定

ユーザー単位での設定

最初にGitをインストールした時にはユーザー名とメールアドレスの設定を行います。

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

この時gitのドキュメントにもあるようにユーザー単位で設定を行うために–globalオプションを指定して$HOME/.gitconfigに設定の書き込みを行います。一度ユーザー単位で設定をすればリポジトリを作るたびに設定しなくてもGitを使う時には自動的にこのファイルの値を参照してくれるようになります。

$ git config --list

user.name=gloabl name
user.email=globl@example.com
...

リポジトリ単位での設定

特定のリポジトリでユーザー単位で設定したものとは異なるユーザー名やメールアドレスを設定したい時には–localオプションを使って、リポジトリの.git/configに設定を書き込みます。

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

commitを実行してlogを確かめます。

$ touch text.txt
$ git add -A
$ git commit -m "test commit"
$ git log

...
Author: local name <local@example.com>
...
    test commit

リポジトリで設定した名前とアドレスになっている事が確認出来ます。

設定の優先順序

gitconfigによるuser.nameとuser.mailの設定の仕組みですが、git config –listで確認すると.git/configに設定した値で$HOME/.gitconfigの値を単純に上書きしているだけのようです。

$ git config --list

user.name=gloabl name
user.email=globl@example.com
...
user.name "local name"
user.email local@example.com

gitconfigはユーザーとリポジトリ単位の設定の他に–systemオプションによって/etc/gitconfigに設定を書き込む事でシステム全体への設定を行う事も出来ます。
設定は system > user > local の順番で上書きされて行くことで最終的な値が決定されるので、読み込む際の優先順序で考えるとlocal > user > system の順序で設定が反映されます。
この仕組みはユーザー名やアドレスだけでなくアライアスなども同様なので、設定が思った通りに実行されない場合には設定の優先順位をチェックしてみると解決出来るかもしれません。

まとめ

単に設定を上書きしているだけという予想以上にシンプルな仕組みだったので設定は簡単に出来ました。一つのPCで会社と個人のプロジェクトを両方扱っている人などは、下手にユーザーを切り替えたりするよりは優先順位の高いローカルでリポジトリ毎に設定したほうがトラブルを回避出来るのではないかと思います。
ただ仕組みが単純なだけに設定の一覧を見ただけではミスを見落とす事もありそうなので、特にGithubなどソースコードを不特定多数に公開するようなサービスを使っている場合には設定を変更したあとは一度テストのcommitを実行してからlogを確認してきちんと設定がなされているか確認したほうがベターだと思います。

参照

1.5 使い始める – 最初のGitの構成/git-scm.com
7.1 Git のカスタマイズ – Git の設定/git-scm.com