git bundle create, verify, git clone --filter=blob:none, alternates, GIT_HTTP_LOW_SPEED_*, clé de cache CI. Voir Submodule et LFS ; Kaniko et buildx pour l'OCI. Sans compte : accueil, blog, aide.
Scénario transfrontalier : liaisons WAN irrégulières vers un runner Mac distant
Sur un Mac Mini M4 hors région, la latence moyenne masque retransmissions et timeouts HTTP qui vident les créneaux. Un git clone monolithique retente les mêmes objets lourds ; un bundle segmenté permet de reprendre le transfert côté stockage sans reconstruire tout le graphe.
GIT_HTTP_LOW_SPEED_*, un fetch peut bloquer un worker longtemps sans commit utile.Stratégie de découpage des bundles Git : tranches, vérification et transfert d'objets
Créez chaque .bundle sur un hôte stable ; limitez-vous à OLD_SHA..NEW_SHA aligné sur vos releases. Après copie vers le Mac, lancez git bundle verify avant extraction et notez les missing commits attendus. Dimensionnez la tranche pour rester sous le seuil multipart de votre stockage objet afin qu'un simple curl ou étape de pipeline puisse reprendre un téléchargement interrompu sans relire tout l'historique distant.
export GIT_HTTP_LOW_SPEED_LIMIT=5000
export GIT_HTTP_LOW_SPEED_TIME=600
git bundle create ci-fenetre.bundle OLD_SHA..NEW_SHA --progress
git bundle verify ci-fenetre.bundle
git clone --depth 1 --filter=blob:none --single-branch \
--branch main file:///chemin/ci-fenetre.bundle workspace
cd workspace && git remote set-url origin https://git.exemple.com/org/depot.git
Matrice décisionnelle : transport direct, bundle incrémental ou miroir partiel
| Modèle | Cas d'usage | Risques résiduels | Indicateur de choix |
|---|---|---|---|
| Fetch HTTPS direct | Petit dépôt, branche courte, région proche. | Micro-coupures ; pics transcontinentaux imprévisibles. | Moins de deux cents mégaoctets utiles sur la branche. |
| Bundle + shallow | Historique lourd en amont, fenêtre CI courte, reprise possible. | Noms de bundle et rotation des OLD_SHA. |
WAN instable ou SLA modeste. |
Miroir clone --mirror |
Parc de Mac partageant un même dépôt. | Nettoyeurs concurrents ; lecture seule obligatoire. | Forte réutilisation et alternates validés sécurité. |
Réutilisation du dépôt d'objets Git : alternates, cache partagé et garde-fous
Renseignez .git/objects/info/alternates vers le objects du miroir ; exportez GIT_ALTERNATE_OBJECT_DIRECTORIES en lecture seule. Avec --filter=blob:none, vous évitez de dupliquer les révisions déjà sur le volume. Pour harmoniser clés Gradle et Git, voir la matrice Gradle Kotlin DSL.
echo /Volumes/git-miroirs/mondepot.git/objects > .git/objects/info/alternates
export GIT_ALTERNATE_OBJECT_DIRECTORIES=/Volumes/git-miroirs/mondepot.git/objects
git fetch origin refs/heads/main:refs/remotes/origin/main \
--prune --tags --depth 1 --no-show-forced-updates
Reprise après échec, fetch bornés et clés de cache CI sur Mac distant
Enveloppez git fetch avec backoff 2 · 4 · 8 s et au plus cinq essais ; activez GIT_TRACE_PACKET seulement sur échec. La clé de cache doit mélanger pool, condensé du bundle, profondeur shallow, branche et filtre blob:none pour invalider sans collision à la promotion. Ajoutez l'identifiant de la variante Xcode ou du SDK lorsque plusieurs pipelines partagent le même dépôt Git mais des chaînes de compilation différentes sur un Mac loué commun.
for i in 1 2 3 4 5; do
git fetch origin "+refs/heads/main:refs/remotes/origin/main" && break
sleep $(( i==1 ? 2 : i==2 ? 4 : 8 ))
done
Séquence opératoire reproductible sur le runner Apple Silicon
- WAN. Exporter
GIT_HTTP_LOW_SPEED_LIMITetGIT_HTTP_LOW_SPEED_TIMEavant le réseau. - Bundle. Récupérer la tranche, contrôler l'empreinte si politique stricte.
- Vérifier.
git bundle verifypuisgit fsck --connectivity-onlyaprès le premier fetch. - Shallow.
git clone --depth 1 --filter=blob:none --single-branchdepuis le bundle puisgit remote set-url origin. - Alternates. Fichier ou
GIT_ALTERNATE_OBJECT_DIRECTORIESvers miroir lecture seule. - Cache. Clé déterministe,
git fetchavec retry, journaux courts en artefact.
Repères chiffrés pour une revue d'architecture ou un dossier conformité
Éléments souvent cités dans les ateliers MacPull
- 600 s pour
GIT_HTTP_LOW_SPEED_TIME: compromis usuel avant de libérer le slot. - Cinq essais fetch avec 2 · 4 · 8 s : transitoires sans masquer un mauvais jeton.
- Clé de cache = pool + digest bundle + profondeur shallow : évite collisions multi-branches.