Kilimanjaro Warehouse

WEBとかゲーム開発のことについて書きます。

Git: push declined due to email privacy restrictions の解消法

GitHubにブランチをpushしたときに、
以下のエラーが表示されることがありました。

To github.com:Kilimanjaro-a2/hogehoge.git
 ! [remote rejected] master -> master (push declined due to email privacy restrictions)
error: failed to push some refs to 'git@github.com:Kilimanjaro-a2/hogehoge.git'

これはGitHubの機能によるもので、
GitHub上でメールアドレスを非公開にしている状態で、
コミットにそのアドレスが含まれている場合、pushをブロックしてくれるというものでした。

これを解決するためには、

のいずれかの対応が必要となります。

GitHubに登録しているメールアドレスを公開状態にする

単純に非公開にしているメールアドレスを公開状態にすることで解決します。
アドレスは全世界に公開されるため、そうしたくない場合は使えない方法です。
GitHubの設定からEmailの設定を開き、

Keep my email address private

のチェックを外すことで、メールアドレスが公開状態になります。

参考:
github.com

Block command line pushes that expose my emailのチェックを外す

GitHubの設定からEmailの設定を開き、

Block command line pushes that expose my email

のチェックを外すことで、ブロック機能が無効になります。
これを行うと非公開のアドレスがコミットに含まれたままGitHub上にpushされます。
Publicなレポジトリを使用する場合などは、アドレスが公開されてしまうので注意してください。

コミットに含まれるメールアドレスを別のものに書き換える

コミットに含まれるメールアドレスの情報を、非公開に設定しているアドレスではないものに変更することで解決します。
公開できるアドレスがない場合、適当な文字列を入れると良いと思います。

これから行うコミットのメールアドレス情報を書き換えるには以下のコマンド

// プロジェクト単位
git config user.email "hoge@hoge.hoge"
// グローバル
git config --global user.email "hoge@hoge.hoge"

過去のコミットに含まれるメールアドレスを書き換えるには以下のコマンド

git filter-branch -f --env-filter "GIT_AUTHOR_EMAIL='hoge@hoge.hoge'; GIT_COMMITTER_EMAIL='hoge@hoge.hoge';" HEAD

"hoge@hoge.hoge"の部分は自分のメールアドレスなどの任意の文字列に置き換えてください

過去のコミットを書き換えるコマンドなので、
他人と一緒に開発をしているレポジトリなどの場合、この方法は避けるのが無難でしょう。


参考:
qiita.com