Anonymize Git History


Gitのコミットの匿名化

自分の作品を閲覧できる形で保存しておく必要は、もしかしたらあるかも知れない。 私にとってはそれがGitリポジトリだった。

42でチームでwebアプリの開発をしていたのだが、その時の取り決めでリポジトリはprivateにするということで合意した。 無事開発は終了することができたが、自分の開発経験として他にWebアプリを作ったことはなく、開発経験の見える化をしたかった。

trascenは環境変数経由でOAuthの鍵を渡すなどしないと動かないようになっており、結局のところスクリーンショットや動画で動作を可視化する必要がある。 しかし、とりあえずソースコードの公開だけでもしておきたかったので、自分以外の名前を匿名化することにした。

コミットの編集

gitの情報は全て.gitに保管されている。これをダイレクトに編集する能力は私にはないので、filter-branch(docs)という方法をとる。

git filter-branch -f --msg-filter '
sed -e "s/Merge pull request #\([0-9]*\) from [^/]*\//Merge pull request (anonymized)/" \
    -e "s/Merge branch \([^ ]*\) into \([^ ]*\)/Merge branch (anonymized)/" \
    -e "s/Merge branch \([^ ]*\) of \([^ ]*\) into \([^ ]*\)/Merge branch (anonymized)/"
' -- --all

sedコマンドを使い、特定のパターンにマッチするメッセージを置換する。

そして、git log --pretty=format:"%B" | grepや目視で確認。 どうやら無事匿名化されたようだ。

コミットメッセージ以外には情報は残っていないはずなので、新しいリポジトリを用意して、そこにpushする。

チームメンバの了解が取れれば、無事公開できる。→repo