GithubにGitでプッシュしたらアカウントが違ったときの対処法
Githubと同じ名前のGitユーザーを使ってコミットやプッシュをしたところ、期待したGithubのアカウントではコミット等できていませんでした。
私が解決したやり方を書き残してきます。
問題
状態
問題が起きたのは下記の状態の時でした。
Githubのユーザー名 : foo
Githubのメールアドレス: bar@mail.com
Gitに設定したユーザー名 : foo
Gitに設定したメールアドレス : なし
この状態で下記の手順を実行します。
- リモートリポジトリをクローンします。
- クローンしたローカルリポジトリ内にファイルを作成します。
- ローカルのリポジトリにコミットします。
- リモートリポジトリにプッシュします。
現象
リモートリポジトリのGithub上のコミット履歴を見ると、コミットしたアカウントが自分のものではありませんでした。
より詳しく言うと、コミット者のアカウント名は、先述したGithubとGitのユーザー名と同一のfooという名前ではあります。しかし、アカウントページを観ようとするとどうやらアカウントページが存在しないようでした。
解決
ローカルのリポジトリのディレクトリ内で下記のコマンドを実行します。
git config user.email "bar@mail.com"
その後に先ほどの手順の前まで戻し作業をしてから、再度同じ手順を行います。
そうすると、自分のアカウント(先述したGithubアカウントfoo)にてコミットされていることを、Github上で確認できます。
原因
原因は、ローカルリポジトリにてgitの設定でuser.emailを設定していなかったことでした。
Githubは、gitユーザーのEmail設定を用いて、Githubアカウントと紐づけているようです。
ユーザー名では紐づけを行っていないようです(確か両方とも一意の名前をサインアップ時に求められた気がします。なのでまだ少し理解しがたい気持ちが残っています)。
なので、Emailを正しく設定していなければ、間違ったアカウントでプッシュしてしまいます。
今回の問題はそうして起こりました。
あとがき
いくつかのパターンでプッシュ時のアカウントが期待を満たさないことがあるということがわかりました。
例えば、名前とメールを設定しなかったor間違ったものを入力していた場合などです。
なので、どういったときに成功するのか、失敗するのか、気になりました。少し検証してみました。
ケース番号 | アカウント名 | メールアドレス | 結果 |
---|---|---|---|
0 | (Gitユーザー名が)なしor (Gitユーザー名がGitアカウント名と)違う | なしor違う | 失敗 |
1 | なし | 同じ | 失敗(ただし、globalにユーザー名が設定されていた場合は成功する) |
2 | 違う | 同じ | 成功 |
3 | 同じ | 同じ | 成功 |
* 成功、失敗という言葉の意味は下記の意味で使っています
成功:=期待したGithubアカウントでコミットやプッシュがなされている。
失敗:=存在しないGithubアカウントでコミットやプッシュされたり、そもそも実行ができなかったりする。
ケース2が意外だと感じました。
しかしこれによって、gitユーザーのメールアドレスでGithubアカウントを紐づけているというのは本当のようだと判断できました。