雑記帳

整理しない情報集

更新情報

Gitのアカウント切り替え方法を考える

公開日:

カテゴリ: 開発

Gitを複数ユーザで使い分ける方法を考えてみました。

方法1: OSのユーザを分ける

OSのログインユーザ1つに対し、1Gitアカウントとして運用する方法です。

PortableGitのような$HOMEが共有となるポータブルな環境でない限り、一番シンプルかつ確実な方法です。

通常の利用感のまま使うことができますが、アカウント切り替えはOSの再ログインを要するため、ログインに時間がかかるOSや重いユーザプロファイルの場合はストレスになりそうです。

方法2: $HOME/.git/config

いわゆるグローバル設定を直接変更する方法です。

Gitを初めて使用する場合、以下のコマンドでユーザ設定をすると思いますが、別のユーザを使う際に再度実行して設定値を上書きする、あるいはこのコマンドで書き込まれる設定ファイルを編集やスワップする方法があります。

git config --global user.name [ユーザ名]
git config --global user.email [メールアドレス]

この方法を使う場合は、以下の3パターンのどれかが現実的でしょう。

  • aliasコマンドで、それぞれのユーザが入力済みのgit configを登録しておく
  • シェルファイルやバッチファイルで$HOME/.git/configファイルのuser.nameuser.emailを書き換えるスクリプトを組む
  • シェルファイルやバッチファイルで$HOME/.git/configファイルを入れ替えるスクリプトを組む

最大のデメリットは、アカウントの切り替えを忘れると意図しないユーザでコミットやプッシュをしてしまう可能性があることです。現在どのユーザで作業しているのかに関わらず、コミット前に必ず実行する癖をつけないと、事故る可能性が高いです。

方法3: $REPOSITORY/.git/config

いわゆるリポジトリ単位で設定を変更する方法です。方法2から--globalを取り除いたものです。

Gitのはグローバル設定だけでなく、リポジトリ単位でも設定が可能ですので、それを利用した方法です。普通にGitを使う場合、多くのWebサイトでは方法2の--globalオプションのみを紹介されていますが、特に--globalでなくても使用できます。

git config user.name [ユーザ名]
git config user.email [メールアドレス]

方法2とは異なり、ユーザごとにリポジトリをクローンしてくることになるので、シェルファイルやバッチファイルを用意する意味はありません。

運用イメージは以下のようになります。

/User1用のディレクトリ
  /RepositoryA
    /.git/config <-- User1の名前とメール
/User2用のディレクトリ
  /RepositoryA
    /.git/config <-- User2の名前とメール

デメリットは、同じリポジトリを複数ユーザでコミットする場合は、それぞれクローンしてくることになるので、リポジトリ2個分(2倍)のストレージを使用します。また、各リポジトリ間で設定は共有されないので、面倒でもすべてのローカルリポジトリに設定が必要です。

複数ユーザで同じリポジトリを共有したい(ストレージを2倍使いたくない)場合は方法2を使ったほうが良いでしょう。

その他

  • SSHのクレデンシャルはここでは扱いません。それぞれのユーザ用にHostを作成しておくのが簡単だと思います
    • 最近のSSHでは、他の設定ファイルを読み込むIncludeが使えるようになっているので、いろいろな選択肢があるでしょう

カテゴリ: 開発