【要約】Windowsでgit commitのauthorを全件書き換えた話 — filter-branchが罠だらけだった [Zenn_Python] | Summary by TechDistill
> Source: Zenn_Python
Execute Primary Source
// Problem
WindowsのNTFS環境におけるGitのロックファイル残留問題、およびgit fast-exportの出力に含まれるバイナリデータに対する誤ったテキスト置換が課題。既存のsedを用いた手法では、バイナリデータ内のパターンにマッチすることでデータ長と実データの不一致を招き、リポジトリを破損させるリスクがある。
// Approach
git fast-exportとgit fast-importをPythonスクリプトで仲介させる手法を採用。data Nヘッダーを検知した際、指定されたNバイト分を一切の加工をせずにそのまま読み書きするストリーム処理を実装することで、メタデータのみを安全に置換し、バイナリデータの整合性を完全に維持する。
// Result
176件のコミットに対し、Author/Committer情報の書き換えおよび特定のメタデータ行の削除を完遂。リポジトリの破損を回避しつつ、GitHubのContributionsグラフに正しく反映される形式での履歴再構築に成功した。
Senior Engineer Insight
> 本記事が指摘する「バイナリデータへのsed適用による破損」は、低レイヤーのデータ構造を理解していない場合に陥る典型的なミスである。Windows特有のファイルロック問題も含め、ツールが抽象化している背後の挙動(NTFSの挙動やGitの内部形式)を正確に把握することの重要性を説いている。実務において、履歴の書き換えはForce Pushを伴う破壊的変更であるため、スクリプトによる自動化は有効だが、実行前のバックアップと、バイナリの整合性を担保する厳密な実装が不可欠である。