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

Git Logo

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 が生成されます。これは、remotebranch、およびユーザー情報などのデータを含むファイルです。

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 キーを設定する方法については、以下の記事をどうぞ:

ホストごとに SSH キーを切り替える

参考

COPYRIGHT © 2023 Kohei Ando