概要
分散バージョン管理システムGitの最新メジャーフィーチャーリリースであるGit 2.52が公開された。今回のリリースの最大の特徴は、WITH_RUSTビルドフラグを介してRustで書かれたコードがGitリポジトリに初めて統合されたことだ。現時点では任意の選択肢だが、Git 3.0ではRustが必須依存関係となる予定であり、今回はその布石となる重要なマイルストーンと位置付けられる。Git 3.0は2026年末のリリースを目標としており、2.52はそれに向けた大規模な準備作業を含む。
Rustコードの初統合
Git 2.52ではWITH_RUSTビルドフラグを指定してビルドすることで、Rustで実装された内部機能を利用できる。現時点でRustが担うのは主にパックファイル処理で使われる可変長整数エンコード・デコードだが、CコードからRustヘルパーを呼び出すためのインフラが整備された。Rustがなくてもビルド・動作は可能で、Cのフォールバック実装が提供される。また、SHA-256相互運用性に関連する一部のコードもRustで実装が進められている。将来的にGit 3.0ではRustがビルド時の必須要件になる計画だ。
新コマンドと機能強化
Git 2.52では複数の新コマンドが追加された。git last-modifiedは指定パスに最後にコミットした祖先コミットを表示するコマンドで、GitHubの内部ツール「blame-tree」に由来する。リポジトリ履歴を一度だけ走査して追跡済みパスを除去していく設計により、従来のgit ls-tree + git log --max-count=1の組み合わせと比較して約5.5倍の速度向上を実現する。大規模リポジトリやモノレポで特に恩恵を受けやすい。
実験的なgit repoコマンドも追加された。git repo infoはオブジェクトフォーマット(SHA-1またはSHA-256)や参照タイプなどリポジトリレベルの設定を表示し、git repo structureはコミット・ツリー・ブロブ・タグ・参照のカウントなどリポジトリの構造統計を示す。参照管理関連ではgit refs list・git refs exists・git refs optimizeの各サブコマンドも追加されている。
パフォーマンス面ではgit describeが約30%高速化され、スパースチェックアウト環境のクリーンアップを行うsparse-checkout cleanサブコマンドや、ワイルドカードパス指定をBloomフィルタで扱えるようにする改善も含まれる。リポジトリのメンテナンス戦略としてgeometric戦略が追加され、パックファイルを等比数列的な大きさで管理することでCPUとI/Oのオーバーヘッドを削減できる。
SHA-256相互運用性とGit 3.0への道
Git 3.0の主要目標の一つはデフォルトハッシュをSHA-1からSHA-256へ切り替えることだ。Git 2.52ではSHA-1とSHA-256のリポジトリが相互にプッシュ・プルできるようにするための基盤整備が始まった。完全な相互運用性はGit 3.0を目指しているが、今回の作業はその大きな一歩となる。また、git initがデフォルトブランチとしてmainを使うようにする変更や、既存ユーザーへの移行ヒント表示といった準備も進んでいる。ビルドシステム面でも全オブジェクトを単一のlibgit.aアーカイブに統合する整理が行われ、Mesonビルドシステムへのドキュメントサポートも追加された。