痛みの核:緑のcloneが嘘をつく理由
1 ポインタはバイナリではない。.gitattributes後はテキスト指標のみ。git lfs pullが同じユーザー文脈で無いとXcodeはスタブを見る。
2 資格情報の断絶。Keychainやssh-agentをlaunchdやRunnerが継承しない。LFSはHTTPS/SSHで静かに失敗しWANのように見える。
3 キャッシュキーと並列。共有LFSルートは一方が削除し他方がコンパイル中、または古いヒットで誤版を注入する。
4 成果物の順序逆転。サブモジュール未完の巨大zipは可変パスと競合し再現性を壊す。Git+LFS→staging→検証→原子、のDAGが必要。
層状切り分け:Git→LFS→搬送
L0 ssh -o BatchMode=yesでingressを同一鍵で確認し、known_hostsとControlMasterでMITMをquota誤認から切り離す。
L1 git statusとblobless初回blob遅延を読む。
L2 git lfs ls-filesとgit lfs envをCIログにマスク付きで残す。
L3 rsync/SFTPがstaging/にマニフェスト付きで入るか、inbox/直読みを禁止する。
指標:分をトレンド化する
clone秒、LFS秒、キャッシュ命中率、リトライ、検証結果、APFS inode余力を記録する。LFS P95が約300秒を超えたら、小さく強く版管理されたblobはLFSに、巨大で疎結合な束はimmutable名でrsyncへ、と責務分割し、WAN並列と突き合わせて狭帯域競合を可視化する。
ツールチェーン更新ごとにgit lfs env差分を1枚残すと「コミット無しの遅化」を追跡しやすい。四半期ごとにホスティング側LFS価格とスロットルを見直し、経済性が崩れたら設計を変える。
初動表
| 兆候 | 根 | 先ず | 成果物側 |
|---|---|---|---|
| 数百バイト | pull欠如 | git lfs pullとhooksPath | zipがLFSパスを上書き禁止 |
| 同枝で欠損 | キャッシュ競合 | ジョブ別ルートとSHAキー | 一時dir+原子rename |
| CIユーザーのみ | 資格情報欠如 | deploy keyや機械ユーザー | SFTPとGit読取を分離 |
| 初回のみ遅い | blobless冷え | ミラー温めと.git/lfsキャッシュ | 巨大物は製品庫+rsync |
七手順
- 冒頭で
whoami等とマスクenvを出す。 - サブモジュールSHA固定。
git lfs install --local後にinclude付きpull。- キャッシュはファミリー単位、他ジョブ削除禁止。
staging/へ書きSHA256SUMSで止める。- 並列はSFTP表でMaxStartupsと inode を見る。
- フェーズ別JSONログで週次レビュー。
例:checkout後の明示LFS
git clone --filter=blob:none --no-checkout "$REPO" workspace
cd workspace
git checkout "$SHA"
git lfs install --local
git lfs pull --include="Art,Models,ThirdParty/Binaries"法務が分離を懸念しても、別鍵と別マニフェストなら監査は強まる。スキャナはLFS egressを通常扱いしドメインを許可リスト化する。
まとめ:手順は再現性を上げるが、plistや広域遅延の運用コストは残る。コストが限界ならSFTPMACのマネージドingressでディレクトリ分離と観測を前倒しし、パイプライン定義は手元に置ける。
関連
無人運用はSequoia記事、整合性はchecksum記事、並列はSFTP記事、切替は原子リリース記事を順に読むと理解が揃う。
FAQ
全部Git外へ?
強版管理の中規模はLFS、巨大疎結合は製品庫+rsync。スローガンではなく表で決める。
リモートMacの利点
ネイティブツールチェーンとAPFS意味論が揃い、署名・公証段の静かな破損を減らす。
レンタル判断
手順が揃ってもオンコールが削れないとき。SLA志向の運用に寄せつつ所有感は維持する。
