Site cover image

Site icon imagehtrkwn.dat

Just a htrkwn's personal hobby scrapbook.

✉️GitHub/GitLabのコミットメールアドレスを変更する

目的

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]になるようです。

  1. アバターアイコンをクリック
  2. Edit profile を選択
  3. Commit email のドロップダウンから 「Use a private email」を選択
  4. 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する方がよさそうです。(できない場合は強制フォースプッシュ)