Gitの設定(コミット時に利用する user.name や user.email など)は基本的に git config コマンドを利用して設定をしていきます。
git config にはいくつかのオプションがあり、基本的には --global を使ってPCのユーザーとしての設定をし、個別に設定を変更したいリポジトリについては --local を利用して設定してきました。
しかし、この方法だと毎回設定の手間がかかったり、設定するのを忘れてしまって私用のユーザー名やメールアドレスで会社のリポジトリにコミットしてしまったりと、課題がでてきます。
git config --global コマンドを実行すると ~/.gitconfig に設定が保存されていきますが、Gitにはディレクトリ配下に対して別の config ファイルを適用できます。
今回はそれの備忘MEMOです。
例として、以下のようなディレクトリ構成とします。ここでは ~/dev/project ディレクトリに会社のユーザーを利用したいと想定します。
~/dev
├── study
├── github
└── project
├── projectA
├── projectB
└── projectC
まず、 ~/.gitconfig に以下のような設定を追加します。
[user]
name = syobochim
email = syobochim@email.com
+ [includeIf "gitdir:~/dev/project/"]
+ path = ~/.gitconfig-project
includeIf に、設定を変更したいディレクトリのパスを書き、 path に適用させたい設定ファイルのパスを書きます。
~/.gitconfig-project は会社用の設定として以下のように記載をします。
ここではuser設定のみ追加していますが、 認証情報の保存をする credential.helper などを追記する場合も多いかと思います。
[user]
name = syobochim-office
email = syobochim-office@email.com
そうすると、 ~/dev/project ディレクトリ配下でgitリポジトリを作成したときに、~/.gitconfig-project の設定が適用されます。
git config --list コマンドにて設定を確認してみると、 ~/dev/project ディレクトリ配下のGitリポジトリでは以下のように出力されました。
user.name=syobochim-office と user.email=syobochim-office@email.com にて設定が反映されているのがわかります。
$ git config --list credential.helper=osxkeychain user.name=syobochim user.email=syobochim@email.com includeif.gitdir:~/dev/project/.path=~/.gitconfig-project user.name=syobochim-office user.email=syobochim-office@email.com core.repositoryformatversion=0 core.filemode=true core.bare=false core.logallrefupdates=true core.ignorecase=true core.precomposeunicode=true
実際にコミットしてみても、会社用のユーザーでコミットされていますね。
$ git log
commit 634ab266a2beee348c1de123569f29c78aff7fde
Author: syobochim-office <syobochim-office@email.com>
Date: Tue Aug 25 09:09:44 2020 +0900
test commit
しかし、~/dev/project ディレクトリ以外のGitリポジトリを作成して設定やコミットを実行しても、以下の通り設定は反映されませんでした。
$ git config --list credential.helper=osxkeychain user.name=syobochim user.email=syobochim@email.com includeif.gitdir:~/dev/project/.path=~/.gitconfig-project core.repositoryformatversion=0 core.filemode=true core.bare=false core.logallrefupdates=true core.ignorecase=true core.precomposeunicode=true
$ git log
commit a7bbb75e5fabd46afb362401d1ab8ace7393f2ae
Author: syobochim <syobochim@email.com>
Date: Tue Aug 25 09:13:06 2020 +0900
test commit
ということで、 [includeIf "gitdir:<<path>>"] を ~/.gitconfig に記載すれば、特定のディレクトリ配下のGit設定を一括で変更できました。