Aller au contenu
Développement medium
🔐 Alerte sécurité — Incident supply chain Trivy : lire mon analyse de l'attaque

Git bundle : transférer un dépôt hors-ligne

6 min de lecture

git bundle crée un fichier autonome contenant tout ou partie d’un dépôt Git, transférable par clé USB, email ou tout autre moyen hors-ligne. C’est la solution pour les environnements air-gapped, les transferts entre réseaux isolés et les sauvegardes portables. Ce guide vous apprend à créer un bundle, vérifier son contenu et cloner ou puller depuis un bundle — avec un exemple complet de workflow hors-ligne.

Prérequis : Remotes fondamentaux et Sélection de révisions.

  • Créer un bundle complet d’un dépôt pour transfert hors-ligne
  • Créer des bundles incrémentaux pour des mises à jour légères
  • Vérifier l’intégrité d’un bundle avant de l’utiliser
  • Cloner ou puller depuis un fichier bundle
  • Environnement air-gapped : serveurs sans accès internet
  • Transfert entre réseaux : les deux machines ne se voient pas
  • Sauvegarde portable : un fichier unique contenant tout l’historique
  • Bande passante limitée : envoyer un fichier compressé par email
  • Onboarding : donner le repo complet à un nouveau développeur sur clé USB
Fenêtre de terminal
# Bundle contenant TOUT le dépôt (toutes les branches, tous les tags)
git bundle create mon-projet.bundle --all

Le fichier mon-projet.bundle contient l’intégralité du dépôt : tous les commits, branches, tags et objets Git. C’est l’équivalent d’un clone complet dans un fichier unique.

Pour bundler uniquement une branche :

Fenêtre de terminal
git bundle create main-only.bundle main
Fenêtre de terminal
git clone mon-projet.bundle mon-projet
cd mon-projet

Le bundle est traité comme un remote. Après le clone, configurez le vrai remote :

Fenêtre de terminal
git remote set-url origin https://github.com/org/mon-projet.git
Fenêtre de terminal
git remote add usb /media/usb/mon-projet.bundle
git fetch usb
git merge usb/main

Avant d’importer, validez l’intégrité :

Fenêtre de terminal
git bundle verify mon-projet.bundle
The bundle contains these 3 refs:
a1b2c3d4... refs/heads/main
e4f5a6b7... refs/heads/develop
f0e1d2c3... refs/tags/v1.0.0
The bundle records a complete history.
mon-projet.bundle is okay

Si le bundle est incomplet (incrémental), verify indique quels commits pré-requis manquent.

Pour les mises à jour régulières, inutile de re-bundler tout le dépôt. Créez des bundles contenant uniquement les nouveaux commits :

  1. Premier transfert — bundle complet :

    Fenêtre de terminal
    git bundle create initial.bundle --all
    # Notez le dernier commit inclus
    git rev-parse HEAD
    # a1b2c3d4...
  2. Transferts suivants — uniquement les nouveautés :

    Fenêtre de terminal
    # Depuis le dernier commit transféré
    git bundle create update-1.bundle a1b2c3d4..HEAD --all
  3. Sur la machine de destination — appliquer l’incrément :

    Fenêtre de terminal
    git bundle verify update-1.bundle # Vérifier les pré-requis
    git fetch /chemin/update-1.bundle main:remotes/usb/main
    git merge usb/main

Les tags simplifient le suivi des incréments :

Fenêtre de terminal
# Après chaque transfert, tagger le dernier commit envoyé
git tag last-bundle-v1
# Au prochain transfert
git bundle create update.bundle last-bundle-v1..HEAD --all
git tag last-bundle-v2
Machine A (connectée) Clé USB Machine B (isolée)
───────────────────── ──────────── ─────────────────────
git bundle create copier git clone bundle
projet.bundle --all projet.bundle projet
git remote set-url
origin ...
[... plus tard ...]
git bundle create copier git bundle verify
update.bundle update.bundle git fetch update
tag-v1..HEAD --all git merge
git tag tag-v2
Fenêtre de terminal
git bundle list-heads mon-projet.bundle
a1b2c3d4... refs/heads/main
e4f5a6b7... refs/heads/develop
f0e1d2c3... refs/tags/v1.0.0
SymptômeCause probableSolution
verify dit « prerequisite commit missing »Bundle incrémental, historique manquantImportez d’abord le bundle complet
Bundle très volumineuxContient tout l’historique + gros fichiersUtilisez --since ou des plages de commits
clone depuis bundle : remote invalideURL du bundle comme remotegit remote set-url origin <vraie-url>
unbundle ne fait rien de visibleLes objets sont importés mais pas les branchesUtilisez fetch au lieu de unbundle
  • git bundle create empaquète tout ou partie d’un dépôt dans un fichier unique
  • git bundle verify valide l’intégrité avant import
  • Clone ou fetch depuis un bundle comme depuis un remote
  • Les bundles incrémentaux (plage de commits) réduisent la taille des transferts
  • Solution idéale pour les environnements air-gapped et les transferts hors-ligne

Ce site vous est utile ?

Sachez que moins de 1% des lecteurs soutiennent ce site.

Je maintiens +700 guides gratuits, sans pub ni tracing. Aujourd'hui, ce site ne couvre même pas mes frais d'hébergement, d'électricité, de matériel, de logiciels, mais surtout de cafés.

Un soutien régulier, même symbolique, m'aide à garder ces ressources gratuites et à continuer de produire des guides de qualité. Merci pour votre appui.

Abonnez-vous et suivez mon actualité DevSecOps sur LinkedIn