filter-repoで過去commitのメールアドレスを変更する

2021年8月22日日曜日

git

t f B! P L
gitで過去にcommitした時のメールアドレスを変更したくてfilter-repoを使ってみました。

インストール

filter-repoを使用するにはpython3が必要になります。pipを使ってfilter-repoをインストールします。
pip3 install git-filter-repo

使い方

公式マニュアルのサンプルを参考にします。 まず、filter-repoを実行するプロジェクトをgit cloneで準備します。 次に、新旧のユーザー名とメールアドレスの対応を記載したファイル(mailmap)を作成します。ファイルには、変更元のユーザー名とメールアドレス、変更先のユーザー名とメールアドレスを記載します。
new name <new@new.jp> old name <old@old.jp>
作成したmailmapファイルは、cloneしたリポジトリの外に配置します。リポジトリの中にmailmapファイルを置くと、次のような表示が出力されて動作しません。
Aborting: Refusing to destructively overwrite repo history since
this does not look like a fresh clone.
  (expected freshly packed repo)
Please operate on a fresh clone instead.  If you want to proceed
anyway, use --force.

実行

mailmapファイルを指定してfilter-repoを実行します。
git filter-repo --mailmap ../mailmap
実行時は次のようなログが表示されます。
Parsed 33 commits
New history written in 1.31 seconds; now repacking/cleaning...
Repacking your repo and cleaning out old unneeded objects
:
Completely finished after 2.52 seconds.

リモートへの反映

元のリポジトリとは別のリポジトリを作成します。 git remoteでURLを設定した後pushします。
git remote set-url origin git@github.com:aaa/bbb.git
git push --force --tags origin 'refs/heads/*'

このブログを検索

QooQ