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/*'