HN 日本語サマリー

← 一覧へ戻る
オープンソース

OpenAIのGit大規模リポジトリ向け取り組み

OpenAI's work on Git for large repositories (openai-git-upstream.openai.chatgpt.site)

9 pointsby fratellobigio1 コメント

要約

OpenAIは、Gitのパフォーマンスとスケーラビリティを向上させるための複数のパッチセットを開発・公開しています。これらのパッチは、大規模リポジトリでのコミット、チェックアウト、リポジトリ操作の効率化、メモリ使用量の削減、並列処理の改善に焦点を当てています。

全文翻訳

Ted Nymanより 日付: 2026年7月20日 コミット: 1be6ebe26403 パッチ: 2 パス限定のgit stashは、要求されたすべてのパスがすでにスパースチェックアウト内にある場合でも、フルスパースインデックスを展開していました。可能な限りインデックスをスパースに保ち、パススペックがフルインデックスを必要とする場合に展開し、関連する境界外読み取りを修正します。スパースチェックアウトコーンの外にあるパスは、既存の動作を維持します。 −18.87秒の4回のインデックス展開 + 0.06秒の0回のインデックス展開 Taylor Blauより 日付: 2026年6月21日 コミット: 7e6de2ac6281 パッチ: 4 パスベースのパックトラバーサルは、到達可能性ビットマップまたはデルタアイランドを使用できませんでした。コールバックからコミットとツリー情報を収集することで、パスウォーク中に両方の既存のパック最適化を有効にします。ビットマップがリクエストを満たせない場合は、通常のトラバーサルにフォールバックします。 Ted Nymanより 日付: 2026年7月26日 コミット: c4244bdfe6d2 パッチ: 6 並列パックダウンロードは、部分的なパックを破損させたり、クリーンアップと競合したり、完了した再開を誤って処理したりする可能性がありました。各ダウンロードを正しいオフセットに書き込み、パックをインデックス作成のために利用可能に保ち、完了したダウンロードを処理します。既存のキープファイルは、パックハッシュがアドバタイズされた値と一致する場合にのみ受け入れます。 Taylor Blauより 日付: 2026年7月24日 コミット: fd2739b159d0 パッチ: 5 パック内の重複オブジェクトは、逆インデックス、マルチパックインデックス、およびビットマップの再利用を混乱させる可能性がありました。オブジェクトを実際のパックオフセットに一致させ、デルタを解決する際に使用可能なコピーを回復し、安全でないビットマップの再利用を回避します。選択されたインデックスエントリが物理パック位置と一致しない場合は、通常のパッキングにフォールバックします。 Taylor Blauより 日付: 2026年7月12日 コミット: 90202ce6e1da パッチ: 4 一部のGitサーバーはREF_DELTAオブジェクトを受け入れることができませんが、クライアントはその制限を交渉できませんでした。no-ref-delta機能を追加し、send-packとpack-objectsにそれを尊重するように教えます。サーバーが受け入れるオブジェクト形式を正確に伝えられるように、新しい制限をofs-deltaとは独立して保ちます。 Taylor Blauより 日付: 2026年6月26日 コミット: a53c3b619337 パッチ: 10 Gitは、幾何学的リパッキングとクルフトパックを同じ操作で組み合わせることができませんでした。古いパックをロールバックしながら、到達不能なオブジェクトを別のクルフトパックに書き込みます。幾何学的ロールアップの外にあるパックを利用可能にし、ビットマップを生成する際に一貫した参照スナップショットを使用します。 Taylor Blauより 日付: 2026年6月12日 コミット: 6afc679fa623 パッチ: 3 増分マルチパックインデックスの書き込みは、要求されたベースと後続のレイヤーで必要とされる省略されたパックを無視していました。選択されたベースを尊重し、新しいレイヤーで利用可能になるように、より新しいパックを含めます。要求されたベースより上のパックは、新しいレイヤーからサイレントに除外されるのではなく、含まれます。 Ted Nymanより 日付: 2026年7月28日 コミット: edb762a50b66 パッチ: 1 変更されていないパスのチェックアウトまたは復元は、何も変更されなかった場合でもインデックスを書き直していました。チェックアウトがエントリを変更しない場合、インデックスの書き込みをスキップします。インストール済みのpost-index-changeフックが書き込みを必要とする場合、git checkoutとgit restoreの両方が既存の動作を維持します。 Ted Nymanより 日付: 2026年7月24日 コミット: 047e0526de0f パッチ: 1 再利用されたループインデックスにより、Coccinelleの静的解析が数時間実行され、CIの6時間制限に達していました。個別のループインデックスを宣言して、静的解析が正常に完了できるようにします。ブランチの削除は以前とまったく同じように動作します。各ループ変数は、それを使用するループ内に留まります。 −6時間静的解析タイムアウト +5行の分離されたループインデックス Ted Nymanより 日付: 2026年7月26日 コミット: b1262a537b6c パッチ: 1 Trace2はフェッチネゴシエーションを示しましたが、packfile URIのダウンロードに費やされた時間は示しませんでした。ダウンロードの周囲に1つのTrace2領域を追加し、アドバタイズされたパックファイルの数を記録します。これにより、各パックの個別のトレーシングイベントを発行することなく、外部ダウンロード時間を公開できます。 Taylor Blauより 日付: 2026年7月14日 コミット: 89fbe6e55f1e パッチ: 5 ビットマップ選択は、大量のリポジトリ履歴を公開するマージコミットを過小評価していました。パス長だけでなく、到達可能にする履歴に基づいてビットマップコミットを選択します。測定されたビルドは984.73秒から200.06秒に低下しましたが、両方の実行で同じ578ビットマップが選択されました。 −984.73秒MIDXビットマップ書き込み +200.06秒MIDXビットマップ書き込み Taylor Blauより 日付: 2026年7月20日 コミット: 4e342ff99030 パッチ: 2 並列チェックアウトは衝突を報告しましたが、作業がワーカー間でどのように分散されたかは報告しませんでした。Trace2が有効な場合、各ワーカーのアイテム数、バイト数、失敗数、経過時間、および最も遅いアイテムを記録します。これらのカウンターは、長いチェックアウトが不均一な作業によるものか、異常に遅いファイルによるものかを示します。 Taylor Blauより 日付: 2026年7月23日 コミット: e6386b0dde89 Gitは、キャッシュされたディレクトリに追跡されていないファイルが含まれていないことを確認した後でも、それらを再オープンしていました。キャッシュされた空のディレクトリは、その内容と無視ルールが変更されていないことを確認した後、再利用します。変更された.gitignoreは、通常のディレクトリチェックをトリガーします。 Taylor Blauより 日付: 2026年7月21日 コミット: f0a23ff73781 Gitは、キャッシュツリーと追跡されていないキャッシュインデックスの拡張機能を順番にデコードしていました。十分なインデックスワーカーが利用可能な場合、2つの独立した拡張機能を並列でデコードします。追加のワーカーは大きな拡張機能にのみ使用し、分割インデックスのアセンブリには影響しません。 Taylor Blauより 日付: 2026年7月10日 コミット: 77a6a7b11093 リンクされたワークツリーは、変更履歴について間違ったファイルシステムモニターデーモンに問い合わせる可能性がありました。デーモンクエリを正しいワークツリーに関連付けてから、その結果を使用します。正規のワークツリーパスとそのファイルシステムIDの両方をチェックして、リンクされたチェックアウトが間違った履歴を共有できないようにします。 Taylor Blauより 日付: 2026年7月24日 コミット: 303c4b593ec9 変更されたディレクトリは、古い.gitattributesルールをキャッシュしたままにする可能性がありました。ファイルシステムモニターイベントがそのディレクトリ内の追跡ファイルを変更した場合、キャッシュされた属性をリフレッシュします。無関係なディレクトリイベントは、既存のフォールバック動作を維持します。 Taylor Blauより 日付: 2026年7月29日 コミット: 0dce5c081334 git statusがワークツリーをスキャンしている間にファイルが変更される可能性がありました。スキャン中に変更が発生した場合、スキャン後にファイルシステムモニターを再度チェックして、変更を見逃さないようにします。モニターが介在する編集を報告した場合、以前の結果を信頼するのではなく、影響を受けるスキャンを繰り返します。 Taylor Blauより 日付: 2026年7月10日 コミット: bc1e48f1b660 キャッシュされたクリーンステータスは、関連するGit構成が変更されると無効になります。ステータスとファイル変換に影響する設定を追跡し、それらの設定が変更されたときにキャッシュされた結果を破棄します。無関係な構成変更が、利用可能な結果を無効にしないようにします。 Taylor Blauより 日付: 2026年7月10日 コミット: e9229c085ca0 グローバル、システム、およびリポジトリの属性は、Gitが追跡ファイルを解釈する方法を変更する可能性があります。以前のステータス結果を再利用する前に、それらの属性ファイルとその場所を追跡します。変更された属性ソースが見過ごされないように、欠落ファイルと置き換えられたディレクトリを含めます。 Taylor Blauより 日付: 2026年7月20日 コミット: e0fd8e78a324 外部属性ファイルは、最初のチェックと後続のステータススキャンの間に置き換えられる可能性がありました。スキャン全体で外部属性の同じスナップショットを使用します。これにより、Gitはインデックスをあるルールのセットに対してチェックし、別のルールのセットに対してステータスを収集するという状況を防ぎます。 Taylor Blauより 日付: 2026年7月21日 コミット: f95725ceeb52 プリコミットフックは、Gitがインデックスを更新した後、追跡ファイルを変更する可能性があります。フックの後でファイルシステムモニターを再度チェックして、後続のステータスが古い結果を再利用しないようにします。これは、ファイルのサイズと変更時刻を維持する編集もキャッチします。 Taylor Blauより 日付: 2026年7月28日 コミット: a48a2e16a003 APFSスキャンが実行中に、ディレクトリまたはワークツリーのルートが置き換えられる可能性がありました。スキャンを一時停止し、子ディレクトリまたはワークツリーのルートを置き換えて、Gitが収集された結果を拒否することを確認します。その後、通常のステータスは新しいファイルシステムスキャンにフォールバックします。 Taylor Blauより 日付: 2026年7月23日 コミット: d04644c3b1df バルクスキャンは、git statusが別途チェックする削除されたファイルとサイズ変更をすでに検出しています。後で再検出するのではなく、すでに検出された削除とサイズ変更を再利用します。メタデータが変更されたファイルを引き続き検査しますが、その内容が変更されたかどうかは明確には確立しません。 Taylor Blauより 日付: 2026年7月24日 コミット: b0eae77b29b6 Gitは、100 MiBを超えるファイルを拒否する前に、無視ファイルと属性ファイルのためにメモリを割り当てていました。割り当て前にファイルサイズをチェックして、無駄なメモリと割り当てエラーを回避します。既存の警告を保持します。