DevOps et audit 14 avril 2026

2026 — Matrice de décision : Git worktrees vs clones propres sur runners Mac mini M4 CI

NodeMac Team

Rédacteurs infrastructure de build

La stratégie de checkout est le multiplicateur silencieux derrière chaque pipeline macOS : le même Mac mini M4 peut sembler « assez rapide » avec git worktree ou « mystérieusement flaky » lorsque DerivedData fuit entre les jobs. En 2026, les équipes qui publient une politique explicite worktree vs clone propre réduisent le temps de file et le risque d’audit. Ce guide offre deux matrices, des budgets disque chiffrés, huit étapes de déploiement et des données structurées FAQ pour vos runbooks internes.

Associez cette politique à rétention disque et artefacts, enveloppes de capacité et règles d’affinité runner. Pour des hôtes dédiés supplémentaires à Hong Kong, au Japon, en Corée, à Singapour ou aux États-Unis, commencez par les tarifs et gardez l’aide ouverte pour les schémas d’accès SSH/VNC.

Pourquoi le mode de checkout est un problème d’ordonnancement, pas seulement du trivia Git

Les runners macOS auto-hébergés sont stateful par défaut : caches globaux, éléments de trousseau au niveau utilisateur, et l’emplacement DerivedData par défaut de Xcode survivent aux jobs sauf clôture. Un clone propre par job isole les objets Git mais pas automatiquement les compilateurs. Les worktrees partagent une base d’objets unique — rapide — mais amplifient toute erreur dans les scripts de nettoyage. Traitez le mode de checkout comme partie de votre récit de rayon d’explosion aux côtés des secrets et des identités de signature.

  • Worktrees minimisent les octets git fetch lorsque de nombreuses branches construisent le même flux de révisions.
  • Clones propres maximisent l’isolation lorsque des hooks post-checkout mutent l’outiling hors arbre.
  • Les motifs hybrides (miroir nu chaud + worktrees éphémères) sont courants à l’échelle mais exigent des conventions de chemin strictes.

Matrice de décision A : choisir worktree, clone propre ou hybride

Signal dépôt Mode recommandé Point de vigilance
Monorepo, fort churn, Xcode partagé Hybride (miroir nu + worktrees) Épingler DerivedData avec -derivedDataPath par worktree
Petite app, peu de dépendances, besoin de reproductibilité Clone propre par job Surveiller la bande LFS ; mettre en cache les blobs sur l’hôte avec vérification de checksum
Signature release avec identités liées au matériel Hôte dédié + clone propre Ne jamais partager une base worktree avec des forks non fiables
Builds PR forkées de contributeurs externes Clone éphémère sur chemin unique Désactiver les miroirs nus partagés au-delà des frontières de confiance

Matrice de décision B : placement du cache vs risque de fuite

Le mode de checkout choisit où vivent les objets Git ; le placement du cache choisit ce qui survit au prochain job. Sans aligner les deux, vous « clonez propre » tout en fuyant encore l’état du compilateur via des chemins globaux.

Cache Défaut sûr sur runners M4 Symptôme de fuite
Swift Package Manager SourcePackages par job sous temp d’espace de travail Dérive de version entre PRs si cache global réutilisé sans hash de lockfile
CocoaPods / Bundler Vendor dans le clone ou cache tarball adressé par contenu Extensions natives avec mauvais drapeaux d’architecture
Xcode DerivedData Toujours scoper le chemin par ID de job Tests UI instables après index partiel d’une autre branche

Budgets disque exécutables (points de départ)

  1. Plafond miroir nu : garder les miroirs monorepo sous 120 GB sur hôtes 512 GB ; élaguer avec scripts audités, pas suppressions manuelles.
  2. Worktrees concurrents : plafonner à 4 par hôte sauf métriques IO montrant de la marge de débit lecture soutenu.
  3. Scratch clone propre : réserver le plus grand arbre de travail attendu pour git clone --depth 1 plus pics LFS.
  4. Alarme : pager quand l’espace libre du volume CI passe sous 15 % plus de 5 minutes.

Note d’audit : documentez à quel niveau de confiance appartient chaque groupe de runners. Une base worktree ayant déjà checkouté une PR forkée ne doit pas plus tard construire des artefacts release signés sans wipe documenté.

Huit étapes de déploiement

  1. Classer les dépôts en niveaux internes de confiance, partenaires et forks publics.
  2. Mesurer le p95 checkout+compile par niveau sous les deux modes pendant un sprint.
  3. Implémenter des conventions de chemin telles que /ci/jobs/<id>/tree exclusivement possédées par l’automatisation.
  4. Câbler des hooks post-job qui retirent worktrees, DerivedData et caches simulateur liés à l’ID de job.
  5. Bloquer les caches globaux sauf clé par hash de contenu + niveau de confiance.
  6. Ajouter des métriques pour secondes de checkout, mégaoctets LFS et pourcentage disque libre par hôte.
  7. Game-day un scénario disque plein deux fois par trimestre.
  8. Scaler le matériel lorsque le budget force un partage risqué — NodeMac peut ajouter des nœuds Mac mini M4 dédiés par région sans délais de colocation.

FAQ

Quand git worktree est-il sûr sur des hôtes Mac mini M4 CI partagés ?

Lorsque chaque chemin worktree est isolé par job, les hooks sont contrôlés, les sous-modules figés, et le nettoyage supprime le worktree et les caches colocalisés. Ne partagez pas un dépôt nu avec des sessions développeur interactives.

Pourquoi les clones propres échouent-ils encore aléatoirement ?

Souvent caches globaux, problèmes réseau LFS ou scanners touchant les sorties. Scoper les caches par job et corréler les échecs aux graphes réseau.

Combien de disque en plus pour des worktrees parallèles ?

Budgétez un arbre de travail plus le magasin d’objets partagé par worktree concurrent, plus DerivedData par job si vous compilez des projets Xcode.

Mac mini M4 dédié pour une CI prévisible

Provisionnez des hôtes isolés par niveau de confiance, SSH pour l’automatisation, VNC lorsque vous devez comparer visuellement deux checkouts.

NM
NodeMac Cloud Mac
Déploiement en 5 min

Mac Apple Silicon dédié dans le cloud. Accès SSH/VNC, nœuds HK·JP·SG·US.

Commencer