git configで設定するメールアドレス、~~~@example.comとか適当なアドレスを設定していませんか?。
コードをcommitする場合自分のユーザーに紐づけた正しいメールアドレスでcommitしましょうというお話です。
commitのauthorの同一性の判定
下の画像はGithub上のとあるリポジトリのmasterブランチへのcommit一覧です。表示されている二つのcommitはk8shiro
というユーザーによって作成されました。当然ですが、Github上でも正しく同一ユーザーのcommitとして認識され、かつGithubのアカウントとcommitのauthorが正しく紐づいているので熊のアイコンが表示されています。
これは正しいauthorと正しいメールアドレスでcommitされているのでGithubも正しく認識できています。
このGithubのユーザーとcommitの紐づけは、Githubにpushする時に認証に使用したユーザーではなく、__commitに設定されるメールアドレス__により判定されています。
実験
それでは、正しくないauthor・メールアドレスを使用するとどうなるか見てみましょう。
メールアドレスが違う場合 (authorは正しい)
メールアドレスに間違ったもの(k8shiro@example.comという架空のアドレス)を指定しました。k8shiro committed 1 minutes ago
となっていて文章としては正しそうに見えますがアイコンが灰色のOctoCatになっていて、アイコンをクリックしてもGithubのk8shiro
のユーザーページには飛べません。
authorが違う場合 (メールアドレスは正しい)
続いて、間違ったauthorを指定した場合も実験します。今回はtest_user
というauthorを指定しました。
結果は以下のようになり、authorは間違ったものを指定したにも関わらずk8shiro
ユーザーのcommitとして表示されています。
しかしながらgit log
コマンドで確認するとAuthor: test_user
となります。
commit 5095a0aeb824f39f3a25813edfbc329d12e4df15 (HEAD -> master)
Author: test_user <******@******>
Date: Tue Nov 19 03:36:08 2019 +0000
sample commit 03
commit 24fe47183f0afdd355b58cde8c4e885798384a92 (origin/master, origin/HEAD)
Author: k8shiro <k8shiro@example.com>
Date: Tue Nov 19 03:27:48 2019 +0000
sample commit 02
commit 026f9716911494dbdaa696cbb1eefe2c1b37ced7
Author: ****** **** <******@******>
Date: Tue Nov 19 12:11:53 2019 +0900
sample commit 01
commit 5a715633f9cbf626aeefa9eeb73b7dc5a6ef4f02
Author: ****** **** <******@******>
Date: Tue Nov 19 12:08:53 2019 +0900
Initial commit
他人のメールアドレスの場合
最後にGithub上に存在するユーザーのアドレスをcommit時に指定してしまった場合です。今回はko-he-2
というユーザーのアドレスを指定してしまいました。その結果が下の画像です。
commitやpushの操作や認証をk8shiro
が実行していても、ko-he-2
のcommitと認識されています。
なぜcommitのauthorが重要なのか
チームで開発している場合、他人の書いたコードの意図がわからないことは起こり得ます。この時にcommitの履歴をたどりコードのauthorに質問することになります。また、これ以外にも
- リポジトリの開発者やcommit等の状況
- commiterとcommit量
- ブランチのネットワーク状の可視化
等Githubが提供してくれる統計情報を見るときにも使用されます。
authorとメールアドレスの設定の仕方
サーバー全体(ログインユーザー)に設定する場合
自分の開発サーバーにgitをインストール後に以下を実行すれば、cloneしてきたリポジトリでcommitする場合は以下のコマンドを実行します。
# 適当な場所でgit config --global
git config --global user.name "ユーザー名"
git config --global user.email メールアドレス
特定リポジトリのみauthorとメールアドレスを指定する場合
cloneしてきたリポジトリだけauthorとメールアドレスを変更したい場合は以下のコマンドを実行します。(https://github.com/k8shiro/test_repoをcloneする場合)
# clone後リポジトリ内でgit config --local
git clone https://github.com/k8shiro/test_repo
cd test_repo
git config --local user.name "ユーザー名"
git config --local user.email メールアドレス
特定のcommitのみauthorとメールアドレスを変更する場合
あるcommitに対しauthorとメールアドレスを指定することもできます。この場合、この後のcommitではデフォルトのauthorとメールアドレスに戻ります。
git -c user.name='ユーザー名' -c user.email='メールアドレス' commit -m 'コミットメッセージ'
まとめ
GithubやGitlabのアカウントと、commitのauthorの紐づけはcommitに入るメールアドレスにより判定していることを解説しました。
このアカウントとcommitのauthorの紐づけはコードの変更履歴をたどる上で重要であり、また、様々なGithubやGitlabが提供する統計情報にも使用されているため、正しいものを使用するようにしましょう。