Les développeurs qui tirent souvent du code et des dépendances sur un Mac distant, les utilisateurs de CI et les équipes transfrontalières subissent des builds lents lorsque le clone Git et les registries (npm, Homebrew) sont éloignés. Cet article propose une stratégie de cache reproductible en 2026 : Git shallow clone (et partial clone), cache npm et réutilisation en CI. Vous y trouverez un tableau comparatif, une liste en trois étapes avec commandes exécutables, et les scénarios d'échec courants avec dépannage. Pour la couche Python (uv, miroirs PyPI, lockfile), voir le guide associé : CI Python uv & PyPI sur Mac distant.

Pourquoi la stratégie de cache sur Mac distant impacte la vitesse de build

Sur un Mac distant, chaque git clone complet et chaque npm install sans cache récupèrent des centaines de Mo voire des Go depuis des serveurs parfois à forte latence. En CI, les runners éphémères répètent ces opérations à chaque job : le temps de build et la consommation réseau explosent. Une stratégie de cache bien pensée — shallow ou partial clone pour Git, réutilisation du cache npm et de Homebrew — réduit drastiquement le volume transféré et accélère les builds de façon reproductible.

Git shallow clone et partial clone : comparatif et paramètres

Deux approches permettent de limiter la quantité de données clonées : le shallow clone (historique tronqué) et le partial clone (objets gros blobs récupérés à la demande). Le tableau ci‑dessous résume les cas d'usage et les paramètres clés.

MéthodeParamètre principalAvantagesInconvénients
Shallow clone--depth=1 (ou N)Simple, compatible partout, très rapide pour « dernière révision seulement »Pas d'historique complet ; git fetch --unshallow si besoin ultérieur
Partial clone (blob:none)--filter=blob:noneHistorique complet, blobs téléchargés à la demande ; idéal pour gros dépôtsNécessite Git 2.22+ ; premier checkout peut déclencher des fetches

Commandes exécutables. Shallow : git clone --depth=1 https://github.com/org/repo.git. Partial : git clone --filter=blob:none https://github.com/org/repo.git. Pour une branche précise en shallow : git clone --depth=1 --branch main https://....

Configuration cache npm / Homebrew et réutilisation en CI

Sur le Mac distant, définir un répertoire de cache dédié pour npm et Homebrew permet de réutiliser les artefacts entre jobs. npm : npm config set cache /path/to/npm-cache (ou variable npm_config_cache). Homebrew : HOMEBREW_CACHE pointe vers un répertoire partagé. En CI (GitHub Actions, GitLab CI, etc.), persister ces répertoires en cache (clé incluant lockfile ou version Node) et les restaurer en début de job ; le premier run alimente le cache, les suivants réutilisent. Pour npm, monter ou copier node_modules depuis une image ou un volume si l'environnement est stable.

Liste d'accélération en trois étapes et commandes exécutables

1

Réduire le clone Git. Utiliser git clone --depth=1 <url> pour un checkout « dernière révision » ; ou --filter=blob:none pour un dépôt avec gros binaires. En CI, figer la branche et la profondeur pour reproductibilité.

2

Configurer et persister les caches npm / Homebrew. Définir npm_config_cache et HOMEBREW_CACHE sur un chemin persisté (volume ou cache CI). Étape de cache dans le pipeline : key = hash du lockfile (package-lock.json, yarn.lock) ou version Node.

3

Réutiliser l'environnement en CI. Utiliser des runners Mac dans la même région que le registry (ou un miroir) pour limiter la latence. Restaurer le cache en début de job ; ne faire un npm ci / brew install complet que si le cache est manquant.

Récap commandes
  • git clone --depth=1 --branch main <url>
  • export npm_config_cache=/shared/npm-cache && npm ci
  • export HOMEBREW_CACHE=/shared/brew-cache && brew install …

Scénarios d'échec courants et dépannage

Échecs fréquents et pistes de résolution : (1) Shallow clone puis besoin d'historique — lancer git fetch --unshallow si un outil exige l'historique complet. (2) Partial clone : blob manquant lors du checkout — normal ; Git fetch automatiquement ; vérifier la version Git (2.22+). (3) Cache npm corrompu ou incohérent — supprimer le répertoire de cache et relancer ; en CI, invalider la clé de cache (changer le hash ou le préfixe). (4) Timeouts réseau sur Mac distant — augmenter les timeouts (npm config set fetch-timeout 120000), utiliser un miroir ou un registry proche du runner.

En résumé

Une stratégie de cache sur Mac distant repose sur trois piliers : Git shallow (ou partial) clone pour réduire le volume cloné, configuration et persistance des caches npm et Homebrew, et réutilisation en CI avec des runners proches des registries. En appliquant la liste en trois étapes et les commandes ci‑dessus, vous rendez vos builds reproductibles et plus rapides. Pour héberger vos pipelines et vos environnements de développement sur un Mac distant dédié (faible latence, cache maîtrisé), consultez le blog, l'accueil, les tarifs et la page achat ; essayer ou acheter un Mac distant MacPull permet de stabiliser les pulls de code et de dépendances pour les équipes distribuées.

Mac distant pour CI et cache

Choisissez votre nœud Mac pour accélérer vos builds

Environnement stable, cache et registries maîtrisés. Consultez le blog, l'accueil, les tarifs ou réservez un Mac distant pour vos équipes.

Voir les forfaits Tarifs Blog Accueil
Livraison sous 24h
Scalabilité élastique
Annulation à tout moment
Support 24/7