クラウド Mac Git クローンが遅く感じたり、一晩でディスクがいっぱいになったりする理由
ベアメタル クラウド Mac は高速 NVMe と予測可能な Apple Silicon メモリ帯域幅を公開しますが、それでも Git はフェッチとインデックス パック中にオブジェクト グラフを順番に実行します。したがって、大規模なモノリポジトリのデフォルトの完全クローンは、アンパック中に 1 つの CPU コアを固定しながら、ほぼ直線的にディスクを消費します。シンガポールから米国西部に変更すると、RTT と下り料金が書き換えられるだけです。 Git に実体化を依頼したコミット グラフは縮小されません。
実際的な最初のステップは分類法であり、非難することではありません。インシデントメモに「遅いクローン」と「Xcode ビーチボール」が混在している場合、2 つの異なる測定ループが必要になります。メンバーからホストへの RTT は、ホストからリモートへの Git RTT と同じノートブックに属しますが、これらは互換性のある説明ではありません。すでに Xcode Cloud の時間数とベアメタル ビルド ファームを比較している場合は、その決定記事を近くに置いておいてください。このページでは.gitの増加、オブジェクト取得ポリシー、そしてそれらの曲線が 256 GB のシステムボリュームとどう絡むかに焦点を当てます。
ディスクはほとんど動かないにもかかわらず、進行状況は完了に近づいています。ローカルのアンパックではなく、リモート、TLS ミドルボックス、またはクロスリージョンの小さなパケット損失へのパスでのスロットリングが疑われます。
1 つの CPU コアが飽和している間、ディスクは着実に増加していますが、ネットワークはいっぱいではありません。典型的な全履歴マテリアライゼーションまたは LFS 汚れは、システム ボリュームに大きなバイナリをプルします。
クローンの完了後に対話型セッションが切り替わります。多くの場合、Xcode インデックスと SwiftPM グラフは、スパース コーンのない 16 GB ユニファイド メモリ内のワイド ツリーで動作します。
同じホスト上の 2 番目のクローンは不釣り合いに遅いです。共有キャッシュ パス、ロック競合、または書き込みスロットリングを引き起こすファイル システムの圧力を確認します。
フェッチ レイテンシは営業時間のみと相関します。Git プロトコルの欠陥というよりは、共有出力競合や CI ストームに似ています。
これらの署名が書面で存在すると、リーダーはより小さなオブジェクト セット、より小さな作業ツリー、より広いディスク、または分割ホストのいずれかを選択できるようになります。主因が.git/objectsへのランダム書き込みであるとき、「RAM を足す」より筋の良い議論ができます。複数スキームを束ねる mono-repo はクリーンビルドをさらに増幅します。単一の制約のないクリーンがサブツリー全体に広がり、ディスク テレメトリが謎のスパイクのように見える可能性があります。
ビルド Mac 上の 256 GB は、ハードウェアの道徳的欠陥ではなく、ポリシーの表面として扱います。このボリュームは、履歴 BLOB が BLOB レスまたは部分クローンによって延期される場合、スパース チェックアウトでコーン エンジニアが実際に Xcode で開かれるようにトリミングされる場合、および CI ジョブがデフォルトで LFS コーパス全体を汚さない場合に機能します。チームが完全な履歴と複数の長命ブランチを並べてチェックアウトすることを主張する場合、3 週目あたりの成長曲線は算術演算であり、ベンダーの陰謀ではありません。
最後に、この作業をキュー設計に接続します。インタラクティブな Xcode を提供し、無人アーカイブを実行するホストは、2 番目のマシンを追加する前であっても、明示的なタイム ウィンドウと個別の ID の恩恵を受けます。 SSH と VNC のセッション品質チェックは引き続き関連性を持ちますが、スタックの異なる層を測定するため、Git 側のポリシーに代わるものではありません。
浅いクローン、ブロブレス、スパースチェックアウト、浅いフェッチ
歴史的な完全性、ディスクのヘッドルーム、最初のクローンの壁時計、そして人間工学を同時に最大化する単一のフラグはありません。エンジニアリングとは、主な目的を選択し、受け入れるトレードオフを文書化する技術です。以下のマトリックスは、自分が所有していないコンプライアンス ルールをエンコードするふりをせずに、10 分間のスタンドアップで投影できるように意図的に粗くしています。
| 戦略 | 主な利点 | 主な代償 | 典型用途 |
|---|---|---|---|
| Shallow clone | 履歴が浅くオブジェクトが少ない | blame や一部のマージ基点が狭い | HEAD だけで足りる CI |
| Blobless / partial | ツリー形状は保ち blob は遅延取得 | 後から blob 取得で遅延が跳ねることがある | ディスクが厳しい対話開発 |
| Sparse-checkout | 作業ツリーと索引負荷を縮小 | 円錐パスに所有者とレビューが要る | 複数アプリ mono-repo |
| Shallow fetch | 日次同期が速い | リモートで消えた枝の履歴が欠ける | 長寿命の feature ホスト |
| LFS 集約キャッシュ | ジョブ間でバイナリを再利用 | ディスク予算と清掃自動化が要る | 変化の大きい大容量資産 |
全履歴をデフォルトとして扱うことは、ディスク上で複利を支払い、シングルスレッドでアンパックすることを選択することです。
チームが「オブジェクトDBの大きさ」と「作業ツリーの広さ」のどちらが欠けているかを言語化できれば、.gitを縮められないのに RAM だけ増やす誤配分を避けられます。クローンが遅いのにディスクが半分未満なら、Git リモートとレジストリを基準にマクロリージョンを見直します。CPU が一核以外ほぼアイドルなのにディスクだけ伸びるなら、帯域交渉の前にオブジェクト戦略を見直します。
幅の広いディスクと 2 番目のベアメタル インスタンスを比較する容量の計算については、この記事を、すでにブログに掲載されているストレージと並列のマトリックスと組み合わせてください。これらは合わせて、Git 側の曲線とハードウェア側のエンベロープの両方を記述します。
LFS ポインタ、同一領域キャッシュ、ディレクトリ コントラクト
LFS が大きな BLOB をオブジェクト データベースから移動した後、コストはポインターのチェックアウトとキャッシュ ヒットにシフトします。ビルド Mac がシンガポールにあり、LFS バケットがデフォルトで米国西部にある場合、長い実時間でアイドル状態の CPU が表示されます。これは、Git コンピューティングではなく、大洋横断的なペイロードの移動です。 LFS エンドポイントを、実際にクローン作成とテスト作業を実行するマシンと同じ場所に配置します。
スクリプト契約が効きます。CI ではGIT_LFS_SKIP_SMUDGEを立て、必要なときだけgit lfs pull --include=...で実体化し、各ジョブが数 GB を毎回システムボリュームへ展開しないようにします。共有開発ホストは LFS キャッシュ根を既定ホームから外し、試行錯誤が他人のキャッシュを壊さないようにします。
git clone --filter=blob:none <REPO_URL> app cd app git sparse-checkout set apps/ios libs/shared git lfs install --local git lfs pull --include="*.psd,*.zip"
スニペットを文字通りの円錐リストではなく、構造上のガイダンスとして扱います。本物の円錐形はレビュー済みの文書に含まれています。部分的なクローン フラグのないサブモジュールはサブディレクトリの下に完全な履歴を静かに再導入できるため、サブモジュールのレイアウトも同様の精査に値します。
ヒント:週次ディスク確認を sparse 円錐の所有者と同じ Runbook ページに置き、監査ではリンクを一本化します。
最初のクローンから毎週の凍結までの 6 ステップのランブック
主目的を文書化:このサイクルが初回クローン時間・定常ディスク・blame 完全性のどれを最適化するかを決め、三人三様のクローン手順を防ぎます。
二段のネットワーク脚を測定:メンバー→ホスト RTT とホスト→Git リモート RTT を分けて記録し、それぞれで大容量転送の曲線を一回ずつ採ります。
オブジェクト方針を選ぶ:既定を shallow・blobless・full のいずれかに決め、CI だけ別方針にする場合は例外を書面化します。
sparse の円錐を固定:パス一覧はアーキテクチャが所有し、共有本番ホストでのsparse-checkout disableは禁止します。
LFS キャッシュ根を設定:キャッシュ場所を一本化し、夜間清掃としきい値超えアラートを入れます。
週次レビューで凍結判断:3 週間、.gitの増加・クリーンアーカイブ時のディスクピーク・スワップイベントを記録し、その後に月額契約を確定するか分割ホストを追加します。
ステータス レポートに貼り付けることができるウォーターライン
ボリューム傾向:5 営業日連続でディスクがおおよそ 75% を超え、かつ.gitの週次増加がチーム基準の 2 倍なら、blobless 導入や第 2 作業コピー移設を RAM 増設より先に検討します。
スワップと索引:16 GB 機で日中に再現性のあるスワップ嵐が Xcode 索引と広いツリーに結び付くなら、円錐を絞るか CI を別インスタンスへ移します。
出口比:ホスト→レジストリの壁時計がメンバー→ホストより桁で大きいなら、並列ジョブを増やす前にリージョン局所性かミラーを直します。
注意:これらのしきい値はエンジニアリング上の目安であり、ベンダー SLA ではありません。自前の traceroute 標本と署名 URL の TLS タイミングで検証してください。
Default git cloneモノリポジトリでは、3 週目までに 256 GB のボリュームが危険ゾーンに追い込まれ、チームは「今日の Wi-Fi が悪い」と見せかけた削除と再クローンのシアターでコストを吸収します。オブジェクト、スパース コーン、LFS キャッシュに関するポリシーを作成することで、これらのスパイクを定期メンテナンスに切り替えます。月々の支出を確定する前に、シンガポール、東京、ソウル、香港、米国東部、米国西部で実際のベアメタルの測定を実行することは、ショート プログラムがインフラストラクチャへの賭けのリスクを軽減する方法です。MESHLAUNCH Mac mini cloud rental is usually the stronger fitそのワークフローでは、デフォルトと共有出力を謎のホストに積み重ねるのではなく、Git を検証し、1 日または 1 週間のレンタルを使用して専用の Apple Silicon 上で動作を構築するためです。
まず同一ホストでディスクと CPU のシグネチャを取得します。ディスクと第 2 台の比較は ストレージと並列のマトリックス を参照し、料金は レンタル価格 ページを確認します。
クローンとテストを行うクラウド Mac に局所性を合わせます。Xcode Cloud とベアメタルの比較は 意思決定ガイド を参照してください。
同一ボリュームにフル履歴・深い作業ツリー・並列クローン・既定の DerivedData を重ねる構成です。リモート接続の要点は ヘルプセンター を参照してください。