一回のコマンドで Git ユーザーを設定・切り替える

Git のリポジトリをイニシャライズした後で、ユーザーネームとメールアドレスを登録しますよね。これは git config
コマンドで設定出来ますが、複数の git profile を使用している場合、 JSON フォーマットで管理出来たら便利です。
そこで、一回のコマンドで git ユーザーの設定・切り替えを可能にするシンプルなスクリプトを作成しました。
Git Config
Git の config
には 『 global 』 と 『 project (repository) 』 という二つのスコープがあります。
Global Config
global の config ファイルは .gitconfig
としてユーザーホームディレクトリに存在し、デフォルトの user name と email が設定されています。
Project (Repository) Config
git init
コマンドでリポジトリを作成すると、.git/config
が生成されます。これは、remote
や branch
、およびユーザー情報などのデータを含むファイルです。
Git ユーザー設定
User name と email を設定するには git config
コマンドを使用します。 Git の global を設定する場合は、--global
オプションを渡します。
Git の global はデフォルト設定の様に使用できますが、使用する git profile が一つの場合はこの設定のみで問題ありません。 複数の profile を使用している場合には、( global profile と同じであっても)リポジトリごとにユーザー設定をして、コミットが正しい profile で実行される様にする必要があります。
Global Config コマンド
$ git config --global user.name <USER NAME>$ git config --global user.email <USER EMAIL>
Project (Repository) Config コマンド
$ git config user.name <USER NAME>$ git config user.email <USER EMAIL>
レポジトリの Git ユーザーを設定・切り替える
それでは、git user profile を設定・切り替えるための実装をしていきます。
方法
- Git user profile データをもつ JSON ファイルを作成
- 引数で指定した profile を抽出し、
git config
を実行するスクリプトを作成 - スクリプトを簡単に実行できる alias を設定
Dependencies/Prerequisites
シェルスクリプトで JSON を扱うには、jq などのライブラリが必要です。これは curl
のレスポンス JSON を解析する事などにも使用できる便利なライブラリです。
Mac では、Homebrew でインストール出来ます:
$ brew install jq
git_users.json
次に、 work/personal ベースでプロファイルを切り替えるユースケースに使用する user profile データ用の JSON ファイルを作成します:
set_git_user.sh
JSON データを読み込み、git config
へ渡すスクリプトは以下の様になります:
CONFIG_PATH
は JSON ファイルへのパスが入るので、実際のファイルロケーションに変更してください。普段は set -e
を使用して、エラーが投げられた直後に終了させますが、今回は jq
の exit code オプションを使用して、JSON 解析が成功したのか、または null が返されたのかを確認することにしました。このオプションは、jq
に -e
を渡すことで有効に出来ます。
実行
これで必要なものがすべて揃ったので、work
プロファイルを設定してみましょう。成功なら、.git/config
の内容がコンソールに出力されます:
$ sh PATH_TO/set_git_user.sh work
Alias を追加
スクリプトを $HOME/scripts の様な場所に置いた場合、毎回絶対パスを入力するのは面倒なので、エイリアスを作成します:
$ alias guser="sh PATH_TO/set_git_user.sh"
これで、どこからでも guser work
を実行するだけで git ユーザーを設定・切り替えることが可能になりました。些細な設定ですが大きな改善だと思います。
TL;DR
この設定はファイルに複数の git user profile を保存し管理するというアイデアから始まりましたが、実際に git ユーザーを簡単に切り替えたいと思っている人は少なくないようなので、この記事が役に立てば嬉しいです。
Git アカウントごとに異なる ssh キーを設定する方法については、以下の記事をどうぞ: