Git 2.51が主要なパフォーマンスの改善と新機能を備えて登場

git 2.51

2ヶ月間の集中的な作業を経て、 GitはGitバージョン2.51を導入しました。 アップデート 506人の開発者が参加した91の変更点がまとめられています。 そのうち21人が初めて寄稿しました。

このリリースでは、git-push と git-fetch のパフォーマンス最適化や、新しい 3.x ブランチに向けたいくつかの変更など、パフォーマンスの向上とリポジトリ管理の簡素化を目的とした改善が導入されています。

Git2.51の主な新機能

Git 2.51のハイライトの一つは git push コマンドと git fetch コマンドの最適化 参照数の多いリポジトリ内。 この改善の鍵はバッチ更新にありますは、複数のリンクを個別にではなく、単一のトランザクションで処理します。

この最適化のおかげで、 reftable バックエンドは、従来のファイル バックエンドよりも優れたパフォーマンスを発揮するようになりました。最大 10 の参照を含むリポジトリでのテストでは、git fetch のパフォーマンスは reftable で 000 倍、ファイルで 22 倍向上し、git push はそれぞれ 1.25 倍と 18 倍向上しました。

もう一つの重要な革新は、いわゆるクラフトパッケージの導入、 ブランチやタグにリンクされていないアクセスできないオブジェクトを格納するために設計されています。以前は散在していたこれらのオブジェクトは、 別々のパッケージで管理できるようになりましたこれにより、制御が容易になり、マルチパッケージ インデックス (MIDX) のサイズが削減されます。

とともに 新しい repack.MIDXMustContainCruft 設定により、Git はこれらのオブジェクトをメインインデックスに含めないようにします。GitHub でのテストでは、この構成によりインデックス サイズが 38% 削減され、書き込みが 35% 高速化され、読み取りが 5% 改善されました。

オブジェクトパッケージへの新しいアプローチ

El git pack-objectsコマンドには--path-walkオプションが組み込まれており、 革新的な方法を導入する パッケージファイルを再編成します。 Git は、ハッシュに基づいてオブジェクトを処理する代わりに、ファイルパスに基づいてオブジェクトを反復処理し、同じ場所にあるオブジェクトをまとめてパックできるようになりました。このアプローチにより、オブジェクトを事前にソートする必要がなくなり、より小さく、より効率的なファイルパックを実現できます。

このバージョンでも Git Stash で作成された作業ツリーの状態とインデックスを交換するための新しい形式が標準化されました。ブランチやタグと同様にスタッシュをエクスポートおよびインポートできるようになり、システム間で状態を移動するのが簡単になりました。

例えば:

git stash エクスポート --to-ref refs/stashes/mi-stash git プッシュ オリジン refs/stashes/mi-stash git フェッチ オリジン '+refs/stashes/*:refs/stashes/*' git stash インポート refs/stashes/mi-stash

クラシックコマンドの改善

いくつかの Gitコマンドは関連するアップデートを受けました:

  • git cat-file は、欠落しているオブジェクトとサブモジュールを報告し、「欠落」とマークするだけでなく、識別子を表示するようになりました。
  • git log は Bloom フィルターの最適化の恩恵を受け、複数のファイル パスによる検索を高速化します。
  • 2019 年から実験的であるとみなされていた git switch コマンドと git restore コマンドが、git checkout の現代的な代替手段として最終的に安定化されました。
  • git log –raw と同等の git whatchanged コマンドは非推奨となり、Git 3.0 で削除されます。
  • git for-each-ref は –start-after オプションを受け取ります。このオプションを –count と組み合わせると、出力のページ区切りが可能になります。
  • git merge と git pull に –compact-summary オプションが追加され、より簡潔な要約形式が提供されるようになりました。

C99のサポートと新しい貢献ルール

GitはC9標準の特性に合わせてコードを適応させ続けています9. 2021 年以降は互換性のあるコンパイラが必須となっていますが、開発者は部分的にしか実装していないコンパイラとの互換性を維持するために慎重に動いています。

さらに、寄付ポリシーに大きな変更が導入されました。 パッチは仮名で提出できるようになりましたこれは Linux カーネルのルールに沿った決定であり、貢献者にさらなる柔軟性を提供するように設計されています。

Git 3.0 への期待

El 開発チームは Git 3.0 へのロードマップも更新しました。では、256つの重要な変更点が際立っています。オブジェクト識別子としてSHA-XNUMXをデフォルトで使用することと、ブランチとタグの参照を保存するためのreftable形式の採用です。これらの改善は、ますます大規模かつ複雑化するリポジトリにおけるセキュリティと効率性の向上を目指しています。

出典 https://lore.kernel.org