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.
Ce que vous allez apprendre
Section intitulée « Ce que vous allez apprendre »- 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
Quand utiliser git bundle ?
Section intitulée « Quand utiliser git 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
Créer un bundle complet
Section intitulée « Créer un bundle complet »# Bundle contenant TOUT le dépôt (toutes les branches, tous les tags)git bundle create mon-projet.bundle --allLe 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 :
git bundle create main-only.bundle mainImporter un bundle
Section intitulée « Importer un bundle »Cloner depuis un bundle
Section intitulée « Cloner depuis un bundle »git clone mon-projet.bundle mon-projetcd mon-projetLe bundle est traité comme un remote. Après le clone, configurez le vrai remote :
git remote set-url origin https://github.com/org/mon-projet.gitAjouter un bundle comme remote
Section intitulée « Ajouter un bundle comme remote »git remote add usb /media/usb/mon-projet.bundlegit fetch usbgit merge usb/mainVérifier un bundle
Section intitulée « Vérifier un bundle »Avant d’importer, validez l’intégrité :
git bundle verify mon-projet.bundleThe bundle contains these 3 refs:a1b2c3d4... refs/heads/maine4f5a6b7... refs/heads/developf0e1d2c3... refs/tags/v1.0.0The bundle records a complete history.mon-projet.bundle is okaySi le bundle est incomplet (incrémental), verify indique quels
commits pré-requis manquent.
Bundles incrémentaux
Section intitulée « Bundles incrémentaux »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 :
-
Premier transfert — bundle complet :
Fenêtre de terminal git bundle create initial.bundle --all# Notez le dernier commit inclusgit rev-parse HEAD# a1b2c3d4... -
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 -
Sur la machine de destination — appliquer l’incrément :
Fenêtre de terminal git bundle verify update-1.bundle # Vérifier les pré-requisgit fetch /chemin/update-1.bundle main:remotes/usb/maingit merge usb/main
Utiliser des tags comme repères
Section intitulée « Utiliser des tags comme repères »Les tags simplifient le suivi des incréments :
# Après chaque transfert, tagger le dernier commit envoyégit tag last-bundle-v1
# Au prochain transfertgit bundle create update.bundle last-bundle-v1..HEAD --allgit tag last-bundle-v2Workflow air-gapped complet
Section intitulée « Workflow air-gapped complet »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 mergegit tag tag-v2Lister le contenu d’un bundle
Section intitulée « Lister le contenu d’un bundle »git bundle list-heads mon-projet.bundlea1b2c3d4... refs/heads/maine4f5a6b7... refs/heads/developf0e1d2c3... refs/tags/v1.0.0Dépannage
Section intitulée « Dépannage »| Symptôme | Cause probable | Solution |
|---|---|---|
verify dit « prerequisite commit missing » | Bundle incrémental, historique manquant | Importez d’abord le bundle complet |
| Bundle très volumineux | Contient tout l’historique + gros fichiers | Utilisez --since ou des plages de commits |
clone depuis bundle : remote invalide | URL du bundle comme remote | git remote set-url origin <vraie-url> |
unbundle ne fait rien de visible | Les objets sont importés mais pas les branches | Utilisez fetch au lieu de unbundle |
À retenir
Section intitulée « À retenir »git bundle createempaquète tout ou partie d’un dépôt dans un fichier uniquegit bundle verifyvalide 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