

社内勉強会の1つのリポジトリに複数のアカウントからコミットする様子をデモしたいのですがユーザーを変更する方法がわかりません。

ローカル側でフォルダAとフォルダBを作成、GitHub
ユーザーも２つ用意しそれぞれのフォルダに割り当てて、「Aフォルダのローカルリポジトリを変更、Bフォルダのローカルリポジトリも変更、このようにプルリクしてやっていきます〜」みたいな見せ方をしたいのです。

しかし、GitHub
に別ユーザーでサインインしても発行されるsshやhttpsは同一で、結果AもBも普段から使っているユーザーからのコミットとして表示されてしまいます。

どのように、すれば良いのでしょうか？  
関連: [同じPCから複数のGitのアカウントを切り替える方法](https://ja.stackoverflow.com/q/29463/3054)


CC BY-SA 3.0
2017-01-08T01:17:48.427
31700
2020-07-15T03:06:53.473
2017-04-13T12:52:39.113
-1
8823
question
git github
GitHub 上でコミットを別アカウントによるものとして表示させたい


GitHubでは **コミットに使うメールアドレス**
で「コミットを作成したユーザー」を識別しています。初めてGitを使う際に何らかのツールや以下のコマンドを通して設定したやつです。

[code]

    git config --global user.name "Your Name"
    git config --global user.email "your_email@example.com"
    
[/code]

例えば上の場合、GitHubは `your_email@example.com` が登録されているユーザーによるコミットとして表示します。

参考 [Why are my commits linked to the wrong
user?](https://help.github.com/articles/why-are-my-commits-linked-to-the-
wrong-user/) \- GitHubのヘルプ記事

なので別のGitHubユーザーとして表示させたい場合は、コミットに使うメールアドレスを変更します。なおGitHub以外のツールやgitコマンドではコミットに使う名前が表示されることになるので、以下の例では名前も併せて変更しています。

## 方法1. リポジトリごとに設定する

[code]

    # GitHub以外ではこの名前が表示されるので、併せて変更するとよい
    git config user.name "Your Another Name"
    git config user.email "your_another_email@example.com"
    
[/code]

`--global` オプションを付けずに実行することで、リポジトリの `.git/config`
に設定を書き込むことができます。こうすればそのリポジトリでだけ特定のメールアドレスを使うことができます。もしくは `.git/config`
をテキストエディタで開いて、次の設定を追加しても構いません。

[code]

    [user]
        name = Your Another Name
        email = your_another_email@example.com
    
[/code]

一度このように設定しておけば、再起動しても残りますし、別のツールでコミットする際にも適用されます。ただしローカルリポジトリに保存される設定ですから、cloneしなおした場合は再設定する必要があります。

## 方法2. 環境変数で一時的に変更する

環境変数 `GIT_AUTHOR_EMAIL` および `GIT_COMMITTER_EMAIL`
で一時的に変更することもできます。いつもではないが時々別名義を使いたいという場合には、これらを設定するコマンドやスクリプトを用意しておくと便利かもしれません。

[code]

    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"
    
[/code]

※ author と committer は両方設定します。

* * *

> GitHub に別ユーザーでサインインしても発行されるsshやhttpsは同一

GitHubの場合

  * SSHではユーザー名固定、どの鍵で接続するかで識別する
  * HTTPSではBasic認証でユーザー名・パスワードを指定するが、発行されるURLには含まれていない

ので、現時点ではユーザーに依らず同じURLが発行されます。

ですがこれは実際のところ、 **当該リポジトリへのアクセス権を持つかどうか**
の判定にしか使われません。でなければ同じSSH鍵を複数のユーザーに設定したときに困ってしまいます。


CC BY-SA 3.0
2017-03-19T06:17:29.883
33409
2017-03-19T06:17:29.883
8000
31700
answer


[@unarist さんの回答](https://ja.stackoverflow.com/a/33409/754)の、

> 方法2. 環境変数で一時的に変更する

に対して追加で、 [direnv](https://direnv.net/) を用いると、ディレクトリごとに環境変数の使い分け、が実現できます。

さらに、 direnv には `source_up` という機能があり、これを用いるとディレクトリ階層を登って `.envrc`
を追加で読み込ませることができます。

自分が良くやるのは、組織毎にディレクトリを作成し(大体は、 github の(組織)アカウント名を使っています)、 git
のリポジトリをそれぞれの組織ディレクトリの中に作成し、組織ディレクトリ自体に `.envrc` を配置しそこで `GIT_AUTHOR_EMAIL` と
`GIT_COMMITTER_EMAIL` を設定、各リポジトリ毎に追加の環境変数があれば、 `source_up` しながらリポジトリ毎に
`.envrc` を作成、といった形で運用しています。


CC BY-SA 4.0
2020-07-12T07:14:07.447
68511
2020-07-15T03:06:53.473
2020-07-15T03:06:53.473
754
754
31700
answer