Git 2.39 ソース管理リリース

2.39 か月の開発期間を経て、分散ソース管理システム Git XNUMX がリリースされました。 Git は最も人気があり、信頼性が高く、高性能のバージョン管理システムの XNUMX つであり、分岐とマージに基づいた柔軟な非線形開発ツールを提供します。 履歴の整合性と遡及的変更への耐性を確保するために、各コミットで以前の履歴全体の暗黙的なハッシュが使用されます。また、開発者のデジタル署名を使用して個々のタグとコミットを認証することも可能です。

以前のリリースと比較して、新しいバージョンには 483 件の変更が含まれており、86 人の開発者の参加によって準備され、そのうち 31 人が初めて開発に参加しました。 主な革新:

  • 変更履歴の統計情報を含む概要を表示するように設計された「git shortlog」コマンドに、作成者やコミッターに限定されないフィールドごとにコミットを任意にグループ化するための「-group」オプションが追加されました。 たとえば、「共同作成者」フィールドに記載されているヘルパーを考慮して、変更数に関する情報を含む開発者のリストを表示するには、次のコマンドを使用できます。 git shortlog -ns --group=author - -group=トレーラー:共著

    ショートログ出力は書式指定子を使用して集約でき、「--group」オプションを使用すると複雑なレポートの作成が大幅に簡素化され、追加の並べ替えコマンドが不要になります。 たとえば、特定のリリースに対して各月に受け入れられたコミット数に関する情報を含むレポートを作成するには、次のように指定できます。 git shortlog v2.38.0.. —date='format:%Y-%m' —group=' %cd' -s 2 2022-08 47 2022-09 405 2022-10 194 2022-11 5 2022-12 以前は、同様の操作を実行するには、sort ユーティリティと uniq ユーティリティを使用する必要がありました: git log v2.38.0 .. —date='format:%Y -%m' —format='%cd' | 並べ替え | ユニーク -c

  • リポジトリ内で参照されていない (ブランチやタグによって参照されていない) 到達不能なオブジェクトをパックするために設計された「クラフト パック」メカニズムの機能が拡張されました。 到達不能なオブジェクトはガベージ コレクターによって削除されますが、競合状態を避けるために、削除されるまで一定時間リポジトリに残ります。 「クラフト パック」メカニズムを使用すると、到達できないすべてのオブジェクトを XNUMX つのパック ファイルに保存し、各オブジェクトの変更時刻に関するデータを別のテーブルに表示し、拡張子が「.mtimes」の別のファイルに保存することができます。合計変更時間と重ならないようにしてください。

    到達不能なオブジェクトが実際に削除されるまでリポジトリに残る時間の長さは、「—prune=」オプションによって決まります。 」 ただし、削除する前に遅延させることは、競合状態によるリポジトリの破損を防ぐためのかなり効果的かつ実用的な方法ですが、100% 信頼できるわけではありません。 破損したリポジトリの復元を容易にするために、新しいリリースでは、「git repack」コマンドに「--expire-to」オプションを追加することで、不足しているオブジェクトを保存する機能が提供されます。これにより、外部リポジトリを作成するファイルを指定できるようになります。削除されたすべてのオブジェクトのコピー。 たとえば、過去 5 分間に変更されていない到達不能なオブジェクトを Backup.git ファイルに保存するには、次のコマンドを使用できます。 git repack --cruft --cruft-expiration=5. minutes.ago -d --expire -to=../backup.git

  • 部分クローン (sparse-checkout) を使用し、部分インデックス (sparse Index) が存在する領域を検索する場合の「git grep -cached」操作の速度が大幅に (最大 70%) 向上しました。 以前は、「-cached」オプションを指定すると、最初に通常のインデックスで検索が実行され、次に部分インデックスで検索が実行されていたため、大規模なリポジトリで検索する場合に顕著な遅延が発生していました。
  • 「git Push」操作中に新しいオブジェクトがリポジトリに配置される前に、サーバーによるその一貫性の検証が高速化されました。 7 万のリンク (うちプッシュ操作でカバーされるのは 3% のみ) を持つテスト リポジトリで、チェック時に宣言されたリンクのみを考慮するように切り替えることで、最適化によりチェック時間を 4.5 倍に短縮できました。
  • コード内の潜在的な整数オーバーフローを防ぐために、「git apply」コマンドは処理できるパッチの最大サイズを制限します。 パッチサイズが1GBを超える場合、エラーが表示されるようになりました。
  • 潜在的な脆弱性から保護するために、HTTP/2 とともに GIT_TRACE_CURL=3 または GIT_CURL_VERBOSE=1 オプションを指定して h1h2 モジュールを使用するときに設定されたヘッダーから不要な情報をクリーンアップするように変更が加えられました。
  • 別のブランチへのシンボリック リンクであるブランチでチェックアウトを実行する場合、「gitsymbolic-ref HEAD」コマンドはシンボリックリンクの名前ではなくターゲット ブランチの名前を表示するようになりました。
  • 前のブランチの説明を編集するための @{-1} 引数のサポートを「--edit-description」オプション (「git Branch —edit-description @{-1}」) に追加しました。
  • 標準入力経由でオプションのリストを渡すための「git merge-tree --stdin」コマンドを追加しました。
  • ネットワーク ファイル システムでは、ファイル システム内の変更を監視する fsmonitor ハンドラーはデフォルトで無効になっています。

出所: オープンネット.ru

コメントを追加します