14
8

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

GitAdvent Calendar 2019

Day 4

[Git初心者向け] GithubやGitlabでcommit時のメールアドレスは大切なんだという話。

Last updated at Posted at 2019-12-03

git configで設定するメールアドレス、~~~@example.comとか適当なアドレスを設定していませんか?。
コードをcommitする場合自分のユーザーに紐づけた正しいメールアドレスでcommitしましょうというお話です。

commitのauthorの同一性の判定

 下の画像はGithub上のとあるリポジトリのmasterブランチへのcommit一覧です。表示されている二つのcommitはk8shiroというユーザーによって作成されました。当然ですが、Github上でも正しく同一ユーザーのcommitとして認識され、かつGithubのアカウントとcommitのauthorが正しく紐づいているので熊のアイコンが表示されています。

commit01.png

これは正しいauthorと正しいメールアドレスでcommitされているのでGithubも正しく認識できています。

このGithubのユーザーとcommitの紐づけは、Githubにpushする時に認証に使用したユーザーではなく、__commitに設定されるメールアドレス__により判定されています。

実験

 それでは、正しくないauthor・メールアドレスを使用するとどうなるか見てみましょう。

メールアドレスが違う場合 (authorは正しい)

 メールアドレスに間違ったもの(k8shiro@example.comという架空のアドレス)を指定しました。k8shiro committed 1 minutes agoとなっていて文章としては正しそうに見えますがアイコンが灰色のOctoCatになっていて、アイコンをクリックしてもGithubのk8shiroのユーザーページには飛べません。

commit02.png

authorが違う場合 (メールアドレスは正しい)

 続いて、間違ったauthorを指定した場合も実験します。今回はtest_userというauthorを指定しました。
結果は以下のようになり、authorは間違ったものを指定したにも関わらずk8shiroユーザーのcommitとして表示されています。

commit03.png

しかしながら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というユーザーのアドレスを指定してしまいました。その結果が下の画像です。

commit04.png

commitやpushの操作や認証をk8shiroが実行していても、ko-he-2のcommitと認識されています。

なぜcommitのauthorが重要なのか

 チームで開発している場合、他人の書いたコードの意図がわからないことは起こり得ます。この時にcommitの履歴をたどりコードのauthorに質問することになります。また、これ以外にも

  • リポジトリの開発者やcommit等の状況

insights01.png

  • commiterとcommit量

insights02.png

  • ブランチのネットワーク状の可視化

insights03.png

等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が提供する統計情報にも使用されているため、正しいものを使用するようにしましょう。

14
8
1

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
14
8

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?