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設定を一括で変更できました。