Git 2.50: 大規模リポジトリのパフォーマンス改善など

git-2.50

数日前に発表された Git 2.50プロジェクトの新バージョンのリリース, 600以上の変更を導入 今回は 98 人の新規貢献者を含む 35 人の開発者が参加したアクティブなコミュニティによって推進されました。

Git 2.50 のこの新しいバージョンの特徴は、新しいコマンド (git-diff-pairs) の統合、クリーニング、フィルタリング、メンテナンスの新しい機能、再帰マージ エンジンの ORT への置き換え、パフォーマンスの向上、バグ修正です。

Git2.50の主な新機能

Git 2.50のこの新しいバージョンでは、最も重要な新機能のXNUMXつは いわゆる「クラフトパック」の処理の最適化 つまり、ブランチやタグからアクセスできない、または参照されていないオブジェクトのパッケージです。従来、Git はこれらのオブジェクトを単一の大きなパッケージファイルに保存していたため、多数のアイテムを含むリポジトリを再パッケージ化する際にパフォーマンスの問題が発生する可能性がありました。

新しいバージョンでは、 Gitを使用すると、これらの不要なパックを複数の小さなファイルに分割できます。これにより、ディスク使用量が削減され、一括操作の入出力パフォーマンスが向上します。さらに、オプション –combine-cruft-below-size を入力します、それは可能にします 小さなパッケージをより柔軟に1つに組み合わせる 従来の –max-cruft-size オプションよりも高速ですが、ファイルサイズの合計に制限はありません。この新機能は、孤立したオブジェクトが複数のパッケージに分散しているプロジェクトで特に役立ちます。

大規模リポジトリ向けのもう一つの改善点は、 ~の実験的サポート 増分更新 MIDX指数オブジェクトに関する情報を別々のレイヤーに保存します ビットマップファイルを使用することで、新しいコミットが追加されるたびに更新が高速化されます。この進歩は、メタデータを完全に再構築することなく迅速なインデックス作成操作を必要とする大規模リポジトリにとって非常に重要です。

再帰マージエンジンをORTに完全に置き換えました

Git 2.50では、 再帰核融合エンジンの永久除去 伝統的。代わりに、 ORTの使用が統合されるより現代的で、保守性が高く、効率的な融合エンジン。 ORTは、より正確な競合分析を提供するだけでなく、追加オブジェクトを生成せずにマージが可能かどうかを検証することもできます。さらに、merge-treeコマンドに--quietオプションが追加され、リポジトリを変更せずにサイレントマージチェッカーとして使用できます。

gitt-diff-pairs: スケーラビリティ問題の解決策

コードレビューは現代の共同開発の柱の一つであることは間違いありません。そして、リビジョン間の差分はこのプロセスにおいて重要な役割を果たします。Git 2.50の登場により、スケーラビリティを重視したソリューションとして、新しいgit-diff-pairsコマンドが導入されました。

従来、2 つのリビジョンを比較するには、次のようなコマンドを使用します。

git diff HEAD~1 HEAD

これにより、リストされたリビジョン間のすべての変更を含む完全なパッチが生成されます。多くの場合効果的ですが、変更されたファイルの大規模なセットを扱う場合はパフォーマンス上の問題が発生する可能性があります。

そのため、git-diff-pairs は、git diff-tree の出力から生の入力を直接受け取り、対応するパッチを効率的かつ正確に生成するように特別に設計されています。

使い方は簡単です:

git diff-tree -r -z -M HEAD~ HEAD | git diff-pairs -z

このコマンドは、指定されたBLOBペアを受け取り、正確な差分出力を生成します。これにより、コンテキスト情報が保持され、作業をより小さなバッチに分割することが可能になります。これにより、並列処理が可能になり、リソース効率が向上し、GitLabのような差分ベースのツールにおけるスケーラビリティが向上します。

クリーニング、フィルタリング、メンテナンスのための新機能

Git 2.50 には、リポジトリのメンテナンスを改善するために設計されたいくつかの追加ツールが含まれています。

  • コマンドが追加されました git reflog ドロップを使用すると、特定のブランチの reflog を完全に削除できるため、以前の参照を維持する必要がなくなった場合に作業履歴をクリーンアップするのに最適です。
  • 選択 -フィルター cat-file –batch が git で利用できるようになりました。これにより、オブジェクト タイプ別に結果をフィルターできます。

さらに、いくつかの内部最適化も強調されています。

  • プレフィックスのキャッシュと冗長チェックの削減により、シンボリック リンクの使用が改善されました。
  • ドキュメントとテスト スクリプト内の Perl 依存関係を削除し、シェル関数または C 実装に置き換えて、最小限の構成のシステムでコンパイルしやすくしました。
  • コントローラー付属 ユーザー差分 .ini ファイルの違いを分析します。
  • git send-email コマンドと Outlook などの SMTP サーバーとの互換性が向上しました。

最後に、それについてもっと知りたい場合は、の詳細を参照してください。 次のリンク。