越境で帯域が不安定なとき、git fetch単体は切断や不整合に弱いです。bundle と shallow/partialの併用条件を表とマトリクスに落とし、verifyとキャッシュ鍵をコマンド例で示します。Submodule 記事・一覧・ホームへ。

運用で滑りやすい三点

1

bundle 破損でverify 前に失敗すると巻き戻しが困難です。

2

shallowはdepth 不足でマージベース欠落が起きやすいです。

3

鍵がブランチ名のみだとalternates 再利用で古いオブジェクトが残ります。

越境シナリオと不安定帯域でのオブジェクト転送

リモート Mac から越境 HTTPSで巨大 packを引くと切断が起きやすく、bundle スライスに分けverifyへ載せ替えると再試行単位が明確になります。

転送方式の比較(越境前提)

方式長所短所向くケース
fetch単純巨大 pack に弱い安定回線
shallow軽い履歴不足単一ブランチ
partialblob 遅延追加 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 の組み合わせ)

条件推奨パターン補足
単一ブランチshallowdepth はスクリプト要件で決定
切断多発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の併用

技術ブログ一覧・料金・購入・ヘルプ・ホームはログイン不要です。ノード選定は料金からどうぞ。

Git bundle × shallow

越境 CI 向けに Mac ノードと帯域設計を選ぶ

料金・購入・ヘルプ・ホーム・技術ブログ一覧はログイン不要。SSH 接続後に上記パイプラインを載せられます。