質問: 社内勉強会の1つのリポジトリに複数のアカウントからコミットする様子をデモしたいのですがユーザーを変更する方法がわかりません。 ローカル側でフォルダAとフォルダBを作成、GitHub ユーザーも2つ用意しそれぞれのフォルダに割り当てて、「Aフォルダのローカルリポジトリを変更、Bフォルダのローカルリポジトリも変更、このようにプルリクしてやっていきます〜」みたいな見せ方をしたいのです。 しかし、GitHub に別ユーザーでサインインしても発行されるsshやhttpsは同一で、結果AもBも普段から使っているユーザーからのコミットとして表示されてしまいます。 どのように、すれば良いのでしょうか? 関連: 同じPCから複数のGitのアカウントを切り替える方法
回答: GitHubでは**コミットに使うメールアドレス**で「コミットを作成したユーザー」を識別しています。初めてGitを使う際に何らかのツールや以下のコマンドを通して設定したやつです。 ``` git config --global user.name "Your Name" git config --global user.email "your_email@example.com" ``` 例えば上の場合、GitHubは `your_email@example.com` が登録されているユーザーによるコミットとして表示します。 参考 Why are my commits linked to the wrong user? - GitHubのヘルプ記事 なので別のGitHubユーザーとして表示させたい場合は、コミットに使うメールアドレスを変更します。なおGitHub以外のツールやgitコマンドではコミットに使う名前が表示されることになるので、以下の例では名前も併せて変更しています。 方法1. リポジトリごとに設定する ``` # GitHub以外ではこの名前が表示されるので、併せて変更するとよい git config user.name "Your Another Name" git config user.email "your_another_email@example.com" ``` `--global` オプションを付けずに実行することで、リポジトリの `.git/config` に設定を書き込むことができます。こうすればそのリポジトリでだけ特定のメールアドレスを使うことができます。もしくは `.git/config` をテキストエディタで開いて、次の設定を追加しても構いません。 ``` [user] name = Your Another Name email = your_another_email@example.com ``` 一度このように設定しておけば、再起動しても残りますし、別のツールでコミットする際にも適用されます。ただしローカルリポジトリに保存される設定ですから、cloneしなおした場合は再設定する必要があります。 方法2. 環境変数で一時的に変更する 環境変数 `GIT_AUTHOR_EMAIL` および `GIT_COMMITTER_EMAIL` で一時的に変更することもできます。いつもではないが時々別名義を使いたいという場合には、これらを設定するコマンドやスクリプトを用意しておくと便利かもしれません。 ``` export GIT_AUTHOR_NAME="Your Another Name" export GIT_AUTHOR_EMAIL="your_another_email@example.com" export GIT_COMMITTER_NAME="Your Another Name" export GIT_COMMITTER_EMAIL="your_another_email@example.com" ``` ※ author と committer は両方設定します。 > > GitHub に別ユーザーでサインインしても発行されるsshやhttpsは同一 > > > GitHubの場合 * SSHではユーザー名固定、どの鍵で接続するかで識別する * HTTPSではBasic認証でユーザー名・パスワードを指定するが、発行されるURLには含まれていない ので、現時点ではユーザーに依らず同じURLが発行されます。 ですがこれは実際のところ、**当該リポジトリへのアクセス権を持つかどうか**の判定にしか使われません。でなければ同じSSH鍵を複数のユーザーに設定したときに困ってしまいます。