あるあるだと思うのですが、プライベート端末でさくっと作っていたものを会社側のリポジトリに持っていくことになりました。
とはいえGit管理していたので過去のコミットがユーザ名/メールアドレスがプライベートのものになっていた……のでこれを変更したい。
git filter-branch -f --env-filter \
"GIT_AUTHOR_NAME='new'; \
GIT_AUTHOR_EMAIL='[email protected]'; \
GIT_COMMITTER_NAME='new'; \
GIT_COMMITTER_EMAIL='[email protected]';" \
HEAD
いつも使ってるコマンドだったのですが、なにか警告が出ていた。
WARNING: git-filter-branch has a glut of gotchas generating mangled history
rewrites. Hit Ctrl-C before proceeding to abort, then use an
alternative filtering tool such as 'git filter-repo'
(https://github.com/newren/git-filter-repo/) instead. See the
filter-branch manual page for more details; to squelch this warning,
set FILTER_BRANCH_SQUELCH_WARNING=1.
なんですかこれってなりましたが、どうやら git-filter-repo
を使って欲しいらしい。
Macでhomebrewを使っているので下記コマンドでインストール。
$ brew install git-filter-repo
プロジェクト直下に new.mailmap
ファイルを作成して中身を下記のように記載。
new <[email protected]> <[email protected]>
先程作成したファイルをオプションに加え、filter-repoを実行してみる。
$ git filter-repo --mailmap new.mailmap
Aborting: Refusing to destructively overwrite repo history since
this does not look like a fresh clone.
(expected at most one entry in the reflog for HEAD)
Please operate on a fresh clone instead. If you want to proceed
anyway, use --force.
怒られたのでforce
しておく。
$ git filter-repo -f --mailmap new.mailmap
Parsed 7 commits
New history written in 0.06 seconds; now repacking/cleaning...
Repacking your repo and cleaning out old unneeded objects
(なんかいろいろ出るので略...)
Completely finished after 0.34 seconds.
無事終わったのでコミットを確認したら無事ユーザ名/メールアドレスが変更されていました。
次から同じようなシーンがあったらfilter-repoを使おうと思う。
参考にしたサイト