越境で帯域が不安定なとき、git fetch単体は切断や不整合に弱いです。bundle と shallow/partialの併用条件を表とマトリクスに落とし、verifyとキャッシュ鍵をコマンド例で示します。Submodule 記事・一覧・ホームへ。
運用で滑りやすい三点
1
bundle 破損でverify 前に失敗すると巻き戻しが困難です。
2
shallowはdepth 不足でマージベース欠落が起きやすいです。
3
鍵がブランチ名のみだとalternates 再利用で古いオブジェクトが残ります。
越境シナリオと不安定帯域でのオブジェクト転送
リモート Mac から越境 HTTPSで巨大 packを引くと切断が起きやすく、bundle スライスに分けverifyへ載せ替えると再試行単位が明確になります。
転送方式の比較(越境前提)
| 方式 | 長所 | 短所 | 向くケース |
|---|---|---|---|
| fetch | 単純 | 巨大 pack に弱い | 安定回線 |
| shallow | 軽い | 履歴不足 | 単一ブランチ |
| partial | blob 遅延 | 追加 fetch | モノレポ |
| bundle | 検証しやすい | 運用増 | 越境切断多 |
Git bundle のスライス戦略と帯域抑制
コミット幅で区切りverifyとSHA256を成果物へ載せます。
git bundle create ci-slice.bundle main~200..main
git bundle verify ci-slice.bundle
git clone --depth=64 /path/to/ci-slice.bundle work
オブジェクトストアの再利用と alternates
alternatesで共有オブジェクトを指すと再転送を抑えます。GIT_ALTERNATE_OBJECT_DIRECTORIESは短命 exportに留めます。
git clone --reference-if-able /var/lib/git-mirror/myproject.git --dissociate --depth=64 --single-branch https://example.com/org/myproject.git work
決定マトリクス(bundle×shallow の組み合わせ)
| 条件 | 推奨パターン | 補足 |
|---|---|---|
| 単一ブランチ | shallow | depth はスクリプト要件で決定 |
| 切断多発 | bundle+verify | 境界はタグ固定が安全 |
| 巨大ツリー | partial と bundle 分離 | 失敗時は浅い層へ |
| 多並列 | alternates | 更新は直列ジョブ |
検証付きパイプライン(五ステップ)
1
基準コミットからbundle 境界とdepthを同一変数で生成します。
2
http.postBufferとlowSpeedを越境向けに上げます。
3
fetch --pruneで枯れ参照を落とします。
4
verify後にfsck --connectivity-onlyを軽量で回します。
5
ミラー更新は直列、キャッシュ鍵にハッシュと depthを載せます。
git -c http.postBuffer=524288000 -c http.lowSpeedLimit=1000 -c http.lowSpeedTime=300 fetch --depth=256 --update-shallow origin main
失敗リトライと CI キャッシュ鍵の設計
四から九十秒の退避で同一スライス連打を避け、鍵にbundle の SHA256・depth・ブランチ指紋・ミラー世代を分離記録します。プール IDをプレフィックスへ載せ誤共有を防ぎます。
まとめ
bundle と verifyをゲートに据え、shallow/partialは要件に応じて深掘りします。alternatesは更新直列化が前提です。
引用できる値
- 退避秒:四から九十秒の階段と最大五回の再試行
- http.postBuffer:524288000 バイト(五百メガバイト相当)を上限例として設定可能
- shallow 例:depth 二百五十六とsingle-branchの併用