解決したかったこと

gitconfigの切り替えが面倒だった

昼休みや空き時間にちょっとしたツールを作るようなことがあり、今までは毎回 ~/.gitconfig を書き換えたり、対象のリポジトリだけ .git/config を書き換えたりする運用をしていました。 が、いくつか問題がありました。

  • うっかり忘れて、コミットユーザー誤爆する
  • 書き換えが面倒くさい
  • ~/.gitconrfig の方はバージョン管理しているので、そもそもあまり書き換えたくない

こういった問題があったので、 ~/.gitconfig をシンボリックリンクにして、リンク先を切り替えるツールを作成しました。

設計

ざっくりこのようなつくりにしました。

  • ~/.gitenv/ 以下に環境の名前ごとのサブディレクトリを作成し、その中に .gitconfig を作成
  • ~/.gitconfig へシンボリックリンクを張る
  • リンク先をコマンドラインで切り替える

使い方の例

※既存の ~/.gitconfig は退避しておいてください

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
# ~/.gitconfig を Alice 用の設定にする
$ gitenv -c alice

# Alice のユーザー設定をする
$ git config --global user.name "Alice"
$ git config --global user.email alice@example.com
$ cat ~/.gitconfig
[user]
    name = Alice
    email = alice@example.com

# ~/.gitconfig を Bob 用の設定に切り替える
$ gitenv -c bob

# Bob のユーザー設定をする
$ git config --global user.name "Bob"
$ git config --global user.email bob@example.com
$ cat ~/.gitconfig
[user]
    name = Bob
    email = bob@example.com

$ ~/.gitconfig を Alice 用の設定に戻す
$ gitenv -c alice
$ cat ~/.gitconfig
[user]
    name = Alice
    email = alice@example.com

# 現在の環境の名前を表示する
$ gitenv
alice (Alice)

実運用

実際に使っている ~/.gitconfig の内容

こんな感じで Include だけを書いてます。

1
2
3
4
5
[Include]
    path = ~/.gitconfig.all
    path = ~/.gitaliases
    path = ~/.gitconfig.kunst1080  # この行を環境ごとに変えて〼

プロンプト

普段は zsh を使っているのですが、環境変数 PROMPT$(gitenv) を埋め込むようにしました。 これで今の設定がどれになっているのかわかります。

プロンプト:

1
2
hoge@MacBook-Pro.local ~  env2 (kunst1080)
$ 

まとめ

これで誤爆を防げるよ。やったね!