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.name
とuser.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
が使えるようになっているので、いろいろな選択肢があるでしょう
- 最近のSSHでは、他の設定ファイルを読み込む
カテゴリ: 開発