社会人になったのでディレクトリに応じてgitの設定を変える

ついに社会人になり、主戦場がmercurialからgitになりました。 gitは今まで脳死anatofuz@gmail.comでcommitしていたのですが、娑婆にでると会社のドメインでcommitする必要性が出てきます。

しかし一般的な趣味プロダクトとかで会社のドメインを使うと不要な怒られが発生する可能性がある...!! 会社のプロダクトに関するものだけ会社のドメインを利用したい...!! という感じで、ディレクトリに応じてgitの設定を切り替えるようにしてみます。

リポジトリ管理

ディレクトリごとに設定を切り替える場合はリポジトリをローカルでどうやって管理するかが重要になってきます。 こういうときはghqを使うと良い感じにURLに応じてディレクトリを掘ってくれるので、会社のドメインに応じたディレクトリを勝手に作ってくれます。

今回は github.com/borderShojiみたいな会社グループのリポジトリをcloneしてきたと仮定して、ghqのルートディレクトリを~/srcとします。 つまりgithub.com/borderShoji/narutoみたいなリポジトリをcloneしたローカルディレクトリは~/src/github.com/borderShoji/narutoとなります。

~/.gitconfigの設定

次はgit全体が見る ~/.gitconfigの設定を書き換えます。

すでにgitconfigにはuserに関する次のような設定が書かれているものとします。

[user]
  name = AnaTofuZ
  email = anatofuz@gmail.com
  username = AnaTofuZ
  signingkey = XXXXX

この設定がある場合、このマシンで行われる全てのgitのオペレーションはこのuser情報が利用されます。

さて最近のgitはconditional includes機能があり、ディレクトリごとで設定ファイルを独自定義できるようになっています。

ここで、先程のgithub.com/borderShojiディレクトリ以下のgitリポジトリに対して設定を独自定義し、デフォルトの設定を上書きするような記述をgitconfigに書いてみます。

[includeIf "gitdir:~/src/github.com/borderShoji/"]
   path = ~/.gitconfig.bordershoji

ここでのポイントはincludeIfの末尾に必ず/をつけるです。/があるとzshでいうところの**/*が書かれているのと等価になり、ディレクトリを再起的にたどってくれますが、/がないとピンポイントでそのディレクトリだけになってしまいます。

あとは~/.gitconfig.bordershojiに上書きしたいgitの設定を描きます。

[user]
  email = anatofuz@borderShoji.net
  signingkey = FFFFFFFFF

こうすると何も考えずにgitの設定がディレクトリごとに代わり、社会性を得ることができます。これで安心!!!!!!