Git 2.55: インクリメンタルMIDX再パックとスマートなメンテナンス
Git 2.55では、インクリメンタルなマルチパックインデックス(MIDX)再パックが導入され、`git repack`がインデックス全体を書き換えることなくMIDXチェーンを書き込み・維持できるようになりました。また、新しい`git history`コマンドで過去のコミットを修正できます。

Git 2.55が100人以上のコントリビューターとともにリリースされ、目玉機能はインクリメンタルなマルチパックインデックス(MIDX)再パックです。大規模リポジトリを管理しているなら、これはメンテナンス実行の遅さや過剰なディスク書き込みから救ってくれる、まさに基盤改善です。
インクリメンタルMIDX再パック
Gitは2.47からインクリメンタルMIDXチェーンをサポートしていましたが、これまでは書き込みに別途の手順が必要でした。Git 2.55では、git repack --write-midx=incrementalで、再パックで生成されたパック用に新しいMIDXレイヤーを直接作成し、既存のレイヤーはそのまま残します。これだけでも追記専用ワークフローには便利です。
真の価値は、--write-midx=incrementalを幾何学的再パック(--geometric=2 -d)と組み合わせたときに発揮されます。アルゴリズムは3つのフェーズで動作します。まず、どのMIDXレイヤーにもカバーされていないパックを再パック候補として選びます。先頭のMIDXレイヤーにrepack.midxNewLayerThreshold以上のパックがある場合、それらのパックも候補になります。次に、その候補セットに幾何学的再パックルールを適用し、新しい先頭レイヤーを書き込みます。最後に、新しいレイヤーのオブジェクト数が古いレイヤーのrepack.midxSplitFactorを超えた場合、隣接するMIDXレイヤーを圧縮します。
この圧縮ステップはメタデータのみの操作で、MIDXレイヤーを書き換えるだけで、基になるオブジェクトを再パックしません。結果として、チェーンは総オブジェクト数に対して対数的に成長し、小さな新しいレイヤーは頻繁に書き換えられ、大きな古いレイヤーはそのまま残ります。オブジェクトの変動が安定しているリポジトリでは、日常的なメンテナンスのコストが劇的に削減されます。
git historyで過去のコミットを修正
Git 2.55では、ブランチ内の過去のコミットを編集するための新しいコマンドgit historyも導入されました。修正コミットを作成してオートスカッシュする代わりに、履歴の途中にあるコミットを直接変更できます。このコマンドはコミット系列を表示するインタラクティブエディターを開き、修正・言い換え・並べ替えを、fixup-and-squashの手間なく行えます。
内部では、git historyはリベースに似たメカニズムを使っていますが、よりシンプルなインターフェースを提供します。特に、レビューに出す前にパッチ系列を磨くのに便利です。3つ前のコミットのタイポを、系列の残りに触れずに修正できます。
どちらの機能もGit 2.55で利用可能です。アップグレードして、メンテナンス実行に余裕を持たせましょう。
ディスカッション
0 件のコメント
最初のコメントを投稿しましょう。