目的
gitのコミットメールアドレスを変更します。実際に使用しているメールアドレスじゃなくて、GitHubやGitLabが提供しているnoreplyメールアドレスを登録してローカルからコミットするようにします。ドキュメントにも書いてありますね~……(今日までしらなかった)。
Windows使ってるのでWindowsで実行したことだけ書きます。
次の引用は「コミットメールアドレスを設定する - GitHub Docs」 から。
コミットがユーザーに帰属し、ユーザーのコントリビューション グラフに表示されるようにするには、GitHub.com でのユーザーのアカウントに接続されているメール アドレス、またはメールの設定でユーザーに提供されている noreply
メール アドレスを使います。
注: 2017 年 7 月 18 日 "以降" に GitHub.com でアカウントを作成した場合は、GitHub のnoreply
メール アドレスは[email protected]
という形式の ID 番号とユーザー名になります。
リポジトリごとに設定しなきゃいけないのがありますが…(ここら辺はうまく解決できそうなので次しらべてやります)。
GitHub での設定
GitHubにログインし、Email Settingから次の項目を有効化します。
- Keep my email addresses private
- Block command line pushes that expose my email
あとはgit bashを開いてドキュメント通りに自分用のnoreply
メールアドレスに変更します。メインはGitHubを使用するのでグローバルにはGitHub用のメールアドレスを登録。
// 元々登録してあったメールアドレスを確認
$ git config --global user.email
email@example.com
// noreplyメールアドレスをglobalに設定
$ git config --global user.email "[email protected]"
// Done
$ git config --global user.email
ID+USERNAME@users.noreply.github.com
次はGitLabの設定をします。
GitLab での設定
Use an automatically-generated private commit email - User account | GitLab https://docs.gitlab.com/ee/user/profile/index.html#use-an-automatically-generated-private-commit-email
Custom hostname for private commit emails - Email | GitLab https://docs.gitlab.com/ee/administration/settings/email.html#custom-hostname-for-private-commit-emails
使用できるメールアドレスは[email protected]
になるようです。
- アバターアイコンをクリック
- Edit profile を選択
- Commit email のドロップダウンから 「Use a private email」を選択
- Update profile settings ボタンをクリック
git-filter-repoで歴史改変
newren/git-filter-repo を利用して過去のコミットログの改変をします。
参考記事
Git + Python をインストールする下準備
Gitはもともと使ってるので省きますが、このためにpythonをMicrosoft Store経由でインストールしました……。
> python -V
Python 3.12.1
> pip --version
pip 23.2.1 ...
git-filter-repo の有効化(Simple Installation)
https://github.com/newren/git-filter-repo/blob/main/INSTALL.md
インストール方法のなかの「Simple Installation」を実行していきます。
まずは git-filter-repo をダウンロードして1行目の
#!/usr/bin/env python3
⇒ #!/usr/bin/env python
に書き換えます。
$ git --exec-path
C:/Program Files/Git/.../libexec/git-core
$ git-filter-repo --version
ae71fad1d03f
さきほど書き換えたgit-filter-repo
ファイルをgit-coreディレクトリの中にいれます。
mailmapファイルの作成
変更したいのはメールアドレスなので、mailmapファイルをリポジトリ外に作成しました。(今回はどんな名前でもよさそうなので、gitlab.mailmap
, github.mailmap
というファイル名にしました)
中身はこんな感じ。
// <[email protected]> <[email protected]> の形式で記入
<UserID-Username@users.noreply.gitlab.com> <email@example.com>
gitbashで実行
ではgit bashで実際にやってみる。リポジトリのルートに移動して実行。
$ git filter-repo -f --mailmap /d/PROJECT/mailmap/gitlab.mailmap
git filter-repo
を実行すると、remote-originの情報は削除されるようです。git remote -v
しても何も出てこない。
リモートリポジトリに変更を反映させるなら、既存の(リモート)リポジトリは避難させて、新しいリポジトリを作ってそこにpushする方がよさそうです。(できない場合は強制フォースプッシュ)