GitHubでのメールアドレス設定とGitクライアントでのメールアドレス設定

記事タイトルとURLをコピーする

コーヒーが好きな木谷映見です。

昨日、「GitHub のメール通知設定はちゃんと organization ごとに設定しよう」というタイトルでブログが公開されました。今回はこちらに便乗して、GitHubを操作する際に必要になるメールアドレス設定について、手元の端末側(ローカルのGit側)の設定も含めて少々深堀りしたいと思います。

blog.serverworks.co.jp

1.GitHubのEmailsで設定するメールアドレスについて

1-1.[Settings]-[Emails]の「Primary」メールアドレス

GitHubにログインし、アイコンをクリックし[Settings]-[Emails]から確認できる「Primary」メールアドレスは、 GitHubからの通知に使うメールアドレス です。 ここのメールアドレスは「Add email address」で複数追加することができ、主たる GitHubからの通知に使うメールアドレス は「Primary email address」で「Primary」として設定しておく必要があります。

こうすると、GitHubからの通知やパスワード再設定時のメールアドレスはPrimaryとした方のメールアドレスに通知されるようになります。

1-2.GitHub Web UIからのコミット操作に紐づくメールアドレス

GitHubはWeb UIからもコミット操作が可能です。その際使われるメールアドレスは基本的に「Primary email address」に設定したメールアドレスが使われます。

「Keep my email addresses private」のチェックボックスをオンにすると、どのリポジトリでWeb UIからコミットしても、紐づくメールアドレスはGitHub提供の非公開用のダミーメールアドレス***@users.noreply.github.com となります。

1-3.所属する組織(Organization)ごとに通知メールアドレス先を変えたい場合

詳細は冒頭でご紹介した弊社ブログをご参照いただければと思います。
簡単に記載しますと、自身が所属する組織(Organization)のリポジトリからの通知を別のメールアドレスで受信したい場合は、

  • 別のメールアドレスを[Settings]-[Emails]の「Add email address」で追加しておく
  • [Settings]-[Notifications]の「Custom routing」で、自身が所属する組織(Organization)リポジトリからの通知を受信したいメールアドレスを設定

することで、通知受信メールアドレスを分けることができます。

2.手元の端末にインストールしたGitクライアントで設定するメールアドレスについて

Gitクライアント側からコマンドで設定するメールアドレスについて記載します。私はWindows 10端末にGit for Windowsをインストールして、Git Bashを 使用しています。今回はこの前提で記載していきます。

2-1.「git config --global user.email ~」で設定したメールアドレスについて

Gitクライアント側では以下のようなコマンドでメールアドレスを設定する必要があります。

git config --global user.email "GitHubに登録したメールアドレス"

このコマンドで設定される内容は、ホームディレクトリに生成されている「.gitconfig」というファイル内に追記されます。

私はGit Bashを開いた時のホームディレクトリをWindows 10のC:\homeにしているので、.gitconfigはここにあります

「.gitconfig」の中身はこのような形になっています。

[user]
    name = emi-ki
    email = kitani@serverworks.co.jp

この「.gitconfig」は Gitの設定 であり、git configコマンドで設定したり内容を参照したりすることができます。これは「gitconfig」とか「gitのconfig」とか呼ばれていて、他にも種類があり、3段階に分かれています。

  • gitconfigの種類
    • システム全体に作用するsystemのconfig
    • ユーザ全体に作用するglobalのconfig
    • 対象リポジトリのみに作用するlocalのconfig

設定はsystem⇒global⇒localの順に読み込まれ、最後に読み込まれた設定で上書きされるため、よりスコープの狭い設定が有効になります。

上記コマンドで設定したのはこの中のglobalにあたります。

システムデフォルトであるsystemを変更するケースはあまりない模様です。基本的にメインで使用するメールアドレスはglobalで設定し、リポジトリごとに細かくコミットアドレスを制御する必要がある場合はリポジトリごとにlocalを設定すればよい、ということになります。

試しに特定のリポジトリにプッシュする際のメールアドレスを、globalで設定したものと違うメールアドレスに変更してみましょう。
何か適当なリモートリポジトリをローカルにクローンし、クローンしたローカルリポジトリに移動して、以下コマンドを実行します。

git config --local user.email "xxxxxxxxxx@gmail.com"

この--localオプションをつけたコマンドによって、この個別リポジトリには個人のgmailアドレスをコミット用に設定した、ということになります。この設定のスコープはlocalなので、globalで設定したメールアドレスよりも優先されます。

設定したlocalのメールアドレスは、この個別リポジトリ内に存在する「.git」ディレクトリ内の「config」に設定されます。

$ cat .git/config
[core]
        repositoryformatversion = 0
        filemode = false
        bare = false
        logallrefupdates = true
        symlinks = false
        ignorecase = true
[remote "origin"]
        url = https://github.com/xxxxx/xxxxx.git
        fetch = +refs/heads/*:refs/remotes/origin/*
[user]
        name = emi-ki
        email = xxxxxxxxxx@gmail.com
[branch "master"]
        remote = origin
        merge = refs/heads/master

2-2.GitHub提供の非公開用ダミーメールアドレスを使用する

GitHubはCommitter(コミットした人)の判別に、Gitクライアントのgit configで設定されたメールアドレスを使用します(2-1.で設定したものです)。
git configで設定されたメールアドレスがGitHub上に登録されているメールアドレスでないと、GitHub上のコミットログに本人のアバターが出ず、ぱっと見わかりにくくなってしまいます。

コミット履歴を見てみる
GitHubに登録していないメールアドレスで コミットしていると、アバターが表示されない

また、git configで設定した自分のメールアドレスはGitHubにpushしたときコミット履歴に残っていて、GitHub上のリモートリポジトリをクローンしてgit logコマンドでコミット履歴を表示すると、Commiterのメールアドレスを表示することができてしまいます。自分のメールアドレスを公開したくない場合は困りますね。

コミット履歴のログを見ると、メールアドレスが分かる
しかし、メールアドレスを設定しないと、コミット履歴に自分のアバターもメールアドレスも残らず、誰が変更したのかわかりにくくなります。

そこで、GitHub提供の非公開用ダミーメールアドレスを使用すれば、自分のメールアドレスを公開することなく、コミット履歴に自分のアバターが表示され、誰が変更したのか分かるようにできるというわけです。

1-2. でも触れましたが、GitHub提供の非公開用ダミーメールアドレスは、[Settings]-[Emails]の「Keep my email addresses private」で確認でき、以下の形式です。

  • USERNAME@users.noreply.github.com
    もしくは
  • ID+USERNAME@users.noreply.github.com

設定方法は2-1.でご紹介したのと同様に、以下コマンドで設定できます。

git config --global user.email "GitHub提供の非公開用ダミーメールアドレス"

2-3.公開メールアドレスでコミットされた変更のPushをGitHub側でブロックする

GitHubの設定 [Settings]-[Emails]から「Block command line pushes that expose my email」にチェックをしておくと、公開メールアドレスでコミットした内容は、Push自体を拒否(ブロック)するようになります。

試しに、公開メールアドレスをでコミットした変更をpushしようとすると、以下のようにエラーになるのが分かります。

$ git push origin master
Enumerating objects: 3, done.
Counting objects: 100% (3/3), done.
Delta compression using up to 8 threads
Compressing objects: 100% (2/2), done.
Writing objects: 100% (2/2), 240 bytes | 240.00 KiB/s, done.
Total 2 (delta 1), reused 0 (delta 0), pack-reused 0
remote: Resolving deltas: 100% (1/1), completed with 1 local object.
remote: error: GH007: Your push would publish a private email address.
remote: You can make your email public or disable this protection by visiting:
remote: http://github.com/settings/emails
To https://github.com/xxxxx/xxxxx.git
 ! [remote rejected] master -> master (push declined due to email privacy restrictions)
error: failed to push some refs to 'https://github.com/xxxxx/xxxxx.git'

公開メールアドレス情報をGitHub上に残したくない場合はこの設定をオンにしておくといいでしょう。ちなみに、この設定をオンにしておいた場合でも、GitHub提供の非公開用ダミーメールアドレスを使用すればpushできます。

おわりに

エンジニアにとってはなじみ深いGitですが、全く知らない状態から勉強するとなるとややハードルがありますよね。特に私はGitHubを個人で使用する場合と仕事で使用する場合があるので、このあたりの設定を理解するのに苦労しました。この記事がどなたかのお役に立てれば幸いです。素敵なGitライフを!

参考

GitHub のコミットメールアドレスを設定する

emi kitani(執筆記事の一覧)

AS部LX課。2022/2入社、亀の歩みで頑張っています。コーヒーとサウナが好きです。AWS認定11冠