Git 🌙
Français ▾ Topics ▾ Latest version ▾ git-bundle last updated in 2.41.0

NOM

git-bundle - Déplace les objets et les références par archive

SYNOPSIS

git bundle create [-q | --quiet | --progress]
		    [--version=<version>] <fichier> <arguments-git-rev-list>
git bundle verify [-q | --quiet] <fichier>
git bundle list-heads <fichier> [<nom-de-ref>…​]
git bundle unbundle [--progress] <fichier> [<nom-de-ref>…​]

DESCRIPTION

CrĂ©er, dĂ©compresser et manipuler des fichiers "bundle". Les colis sont utilisĂ©s pour le transfert "hors ligne" d’objets Git sans qu’un "serveur" actif se trouve de l’autre cĂ´tĂ© de la connexion rĂ©seau.

Ils peuvent ĂŞtre utilisĂ©s pour crĂ©er des sauvegardes incrĂ©mentielles et complètes d’un dĂ©pĂ´t, et pour relayer l’Ă©tat des rĂ©fĂ©rences d’un dĂ©pĂ´t Ă  un autre.

Les commandes Git qui rĂ©cupèrent ou autrement "lisent" via des protocoles tels que ssh:// et https:// peuvent aussi opĂ©rer sur des fichiers cois. Il est possible de git-clone[1] un nouveau dĂ©pĂ´t Ă  partir d’un colis, d’utiliser git-fetch[1] pour en rĂ©cupĂ©rer, et de lister les rĂ©fĂ©rences qu’il contient avec git-ls-remote[1]. Il n’y a pas de support d'"Ă©criture" correspondant, c’est-Ă -dire qu’un git push dans un colis n’est pas supportĂ©.

Voir la section "EXEMPLES" ci-dessous pour plus des exemples d’utilisation des colis.

FORMATS DES COLIS

Les colis sont des fichiers .pack (voir git-pack-objects[1]) avec un en-tête indiquant quelles références sont contenues dans le colis.

Comme le format d’archive packed lui-mĂŞme, les colis peuvent ĂŞtre soit autonomes, soit crĂ©Ă©s Ă  l’aide d’exclusions. Voir la section "PRÉREQUIS D’OBJET" ci-dessous.

Les colis crĂ©Ă©s en utilisant les exclusions de rĂ©vision sont des "paquets minces" crĂ©Ă©s en utilisant l’option --thin de git-pack-objects[1], et dĂ©paquetĂ©s en utilisant l’option --fix-thin de git-index-pack[1].

Il n’y a pas d’option pour crĂ©er un "paquet Ă©pais" lors de l’utilisation des exclusions de rĂ©vision, et les utilisateurs ne doivent pas s’inquiĂ©ter de la diffĂ©rence. En utilisant des "paquets minces", les paquets crĂ©Ă©s Ă  l’aide d’exclusions sont plus petits en taille. Le fait qu’ils soient "minces" sous le capot est simplement notĂ© ici comme une curiositĂ©, et comme une rĂ©fĂ©rence Ă  d’autres documents.

Voir gitformat-bundle[5] pour plus de détails et la discussion sur le "paquets fins" dans gitformat-pack[5] pour plus de détails.

OPTIONS

create [options] <fichier> <git-rev-list-args>

Utilisé pour créer un regroupement nommé fichier. Cela nécessite les arguments <arguments-git-rev-list> pour définir le contenu du regroupement. options' contient les options spécifiques à la sous-commande git bundle create. si fichier est -, le paquet envoyé sur la sortie standard.

verify <fichier>

UtilisĂ© pour vĂ©rifier qu’un fichier regroupement est valide et s’appliquera proprement au dĂ©pĂ´t actuel. Cela inclut des vĂ©rifications sur le format du regroupement lui-mĂŞme ainsi que la vĂ©rification que les commits prĂ©-requis existent et sont complètement liĂ©s dans le dĂ©pĂ´t actuel. git bundle affiche une liste des commits manquants, s’il y en a. Enfin, des informations sur des capacitĂ©s supplĂ©mentaires, telles que "object filter" sont imprimĂ©es. Voir "CapacitĂ©s" dans gitformat-bundle[5] pour plus d’informations. Le code de sortie est zĂ©ro en cas de succès, mais sera non nul si le fichier colis est invalide. Si fichier est -, le paquet est lu sur l’entrĂ©e standard.

list-heads <fichier>

Liste les rĂ©fĂ©rences dĂ©finies dans le regroupement. Si elle est suivie d’une liste de rĂ©fĂ©rences, seules les rĂ©fĂ©rences correspondant Ă  celles donnĂ©es sont imprimĂ©es. Si fichier est -, le paquet est lu sur l’entrĂ©e standard.

unbundle <fichier>

Passe les objets du groupement Ă  git index-pack pour qu’ils soient stockĂ©s dans le dĂ©pĂ´t, puis affiche les noms de toutes les rĂ©fĂ©rences dĂ©finies. Si une liste de rĂ©fĂ©rences est donnĂ©e, seules les rĂ©fĂ©rences correspondant Ă  celles de la liste sont imprimĂ©es. Cette commande est vraiment de plomberie et n’est dĂ©finie que pour ĂŞtre appelĂ©e par git fetch. si fichier est -, le paquet est lu depuis l’entrĂ©e standard.

<git-rev-list-args>

Une liste d’arguments, acceptable pour git rev-parse et git rev-list (et contenant une rĂ©fĂ©rence nommĂ©e, voir SPECIFICATION DES REFERENCES ci-dessous), qui spĂ©cifie les objets et rĂ©fĂ©rences spĂ©cifiques Ă  transporter. Par exemple, master~10..master fait en sorte que la rĂ©fĂ©rence master actuelle soit regroupĂ©e avec tous les objets ajoutĂ©s depuis le dixième commit de son ancĂŞtre. Il n’y a pas de limite explicite au nombre de rĂ©fĂ©rences et d’objets qui peuvent ĂŞtre regroupĂ©s.

[<nom-de-rĂ©f>…​]

Une liste de rĂ©fĂ©rences utilisĂ©e pour limiter les rĂ©fĂ©rences signalĂ©es comme disponibles. Ceci est principalement utile Ă  git fetch, qui s’attend Ă  ne recevoir que les rĂ©fĂ©rences demandĂ©es et pas nĂ©cessairement tout le contenu du pack (dans ce cas, git bundle agit comme git fetch-pack).

--progress

L’Ă©tat d’avancement est affichĂ© sur la sortie d’erreur standard quand elle est attachĂ©e Ă  un terminal, Ă  moins que -q soit spĂ©cifiĂ©. Ce drapeau force l’Ă©tat d’avancement mĂŞme si le flux d’erreur standard n’est pas dirigĂ© vers un terminal.

--version=<version>

SpĂ©cifier la version du regroupement. La version 2 est l’ancien format et ne peut ĂŞtre utilisĂ©e qu’avec les dĂ©pĂ´ts SHA-1 ; la version 3, plus rĂ©cente, contient des capacitĂ©s qui permettent des extensions. La valeur par dĂ©faut est le plus ancien format pris en charge, en fonction de l’algorithme de hachage utilisĂ©.

-q
--quiet

Ce drapeau permet Ă  la commande de ne pas signaler sa progression sur le flux d’erreur standard.

SPÉCIFICATION DES RÉFÉRENCES

Les révisions doivent être accompagnées de noms de référence pour être regroupées dans un colis.

Plus d’une rĂ©fĂ©rence peut ĂŞtre empaquetĂ©e, et plus d’un ensemble d’objets prĂ©requis peut ĂŞtre spĂ©cifiĂ©. Les objets empaquetĂ©s sont ceux qui ne sont pas contenus dans l’union des prĂ©requis.

La commande git bundle create résout les noms de référence pour vous en utilisant les mêmes règles que git rev-parse --abbrev-ref=loose. Chaque pré-requis peut être spécifié explicitement (par exemple ^master~10), ou implicitement (par exemple master~10..master, --since=10.days.ago master).

Tous ces cas simples sont OK (en supposant que nous avons des branches "master" et "next") :

$ git bundle create master.bundle master
$ echo master | git bundle create master.bundle --stdin
$ git bundle create master-and-next.bundle master next
$ (echo master; echo next) | git bundle create master-and-next.bundle --stdin

Et il en est de mĂŞme pour ces exemples (et le mĂŞme mais avec --stdin omis) :

$ git bundle create recent-master.bundle master~10..master
$ git bundle create recent-updates.bundle master~10..master next~5..next

Un nom de rĂ©vision ou un intervalle dont le cĂ´tĂ© droit ne peut ĂŞtre rĂ©solu en une rĂ©fĂ©rence n’est pas acceptĂ© :

$ git bundle create HEAD.bundle $(git rev-parse HEAD)
fatal: Refus de créer un colis vide.
$ git bundle create master-yesterday.bundle master~10..master~5
fatal: Refus de créer un colis vide.

PRÉ-REQUIS D’OBJET

Lors de la crĂ©ation de colis, il est possible de crĂ©er un colis autonome qui peut ĂŞtre dĂ©groupĂ© dans un dĂ©pĂ´t sans historique commun, ainsi que de fournir des rĂ©visions nĂ©gatives pour exclure les objets nĂ©cessaires dans les parties antĂ©rieures de l’historique.

Fournir une rĂ©vision telle que nouveau Ă  git bundle create crĂ©era un fichier colis qui contient tous les objets accessibles depuis la rĂ©vision nouveau. Ce colis peut ĂŞtre dĂ©groupĂ© dans n’importe quel dĂ©pĂ´t pour obtenir un historique complet qui mène Ă  la rĂ©vision nouveau :

$ git bundle create complet.bundle nouveau

Une plage de rĂ©vision telle que ancien..nouveau produira un fichier colis qui nĂ©cessitera l’existence de la rĂ©vision ancien (et de tout objet pouvant ĂŞtre atteint Ă  partir de celle-ci) pour que le colis puisse ĂŞtre "dĂ©groupĂ©" :

$ git bundle create complet.bundle ancien..nouveau

Un colis autonome sans prĂ©-requis peut ĂŞtre extrait n’importe oĂą, mĂŞme dans un dĂ©pĂ´t vide, ou peut ĂŞtre clonĂ© (c-Ă -d, nouveau, mais pas ancien..nouveau).

Il n’y a pas de problème Ă  ĂŞtre prudent et faire en sorte que le fichier regroupement contienne des objets dĂ©jĂ  prĂ©sents dans la destination, car ceux-ci sont ignorĂ©s lors du dĂ©ballage Ă  la destination.

Si vous voulez imiter git clone --mirror, qui inclurait vos refs comme refs/remotes/*, utilisez --all. Si vous voulez fournir le mĂŞme ensemble de rĂ©fĂ©rences qu’un clone directement depuis le dĂ©pĂ´t source, utilisez --branches --tags pour les <arguments-git-rev-list>.

La commande git bundle verify peut être utilisée pour vérifier si votre dépôt destinataire possède les commits pré-requis nécessaires pour un colis.

EXEMPLES

Supposons que vous vouliez transfĂ©rer l’historique d’un dĂ©pĂ´t R1 sur la machine A vers un autre dĂ©pĂ´t R2 sur la machine B. Pour une raison quelconque, la connexion directe entre A et B n’est pas autorisĂ©e, mais nous pouvons dĂ©placer les donnĂ©es de A Ă  B via un mĂ©canisme quelconque (CD, email, etc.). Nous voulons mettre Ă  jour R2 avec le dĂ©veloppement fait sur la branche master dans R1.

Pour amorcer le processus, vous pouvez d’abord crĂ©er un paquet qui n’a pas de prĂ©requis. Vous pouvez utiliser une Ă©tiquette pour vous rappeler jusqu’Ă  quel commit le dernier traitement a Ă©tĂ© fait, afin de faciliter la mise Ă  jour ultĂ©rieure de l’autre dĂ©pĂ´t avec un paquet incrĂ©mental :

machineA$ cd R1
machineA$ git bundle create fichier.paquet master
machineA$ git tag -f dernierpaquetR2 master

Ensuite, vous transfĂ©rez fichier.paquet sur la machine cible B. Comme ce paquet ne nĂ©cessite pas l’extraction d’un objet existant, vous pouvez crĂ©er un nouveau dĂ©Ă´t sur la machine B en le clonant :

machineB$ git clone -b master /home/moi/tmp/fichier.paquet R2

Cela définira un répertoire distant appelé "origin" dans le dépôt résultant qui vous permettra de récupérer et de tirer du paquet. Le fichier $GIT_DIR/config dans R2 aura une entrée comme celle-ci :

[remote "origin"]
    url = /home/moi/tmp/fichier.paquet
    fetch = refs/heads/*:refs/remotes/origin/*

Pour mettre à jour le dépôt mine.git résultant, vous pouvez récupérer ou tirer après avoir remplacé le paquet stocké dans /home/moi/tmp/fichier.paquet par des mises à jour incrémentales.

Après avoir travaillĂ© un peu plus dans le dĂ©pĂ´t d’origine, vous pouvez crĂ©er un paquet incrĂ©mental pour mettre Ă  jour l’autre dĂ©pĂ´t :

machineA$ cd R1
machineA$ git bundle create fichier.paquet dernierpaquetR2..master
machineA$ git tag -f dernierpaquetR2 master

Vous transfĂ©rez ensuite le paquet sur l’autre machine pour remplacer /home/moi/tmp/fichier.paquet, et vous tirez Ă  partir de celui-ci.

machineB$ cd R2
machineB$ git pull

Si vous savez jusqu’Ă  quel commit le dĂ©pĂ´t destinataire devrait avoir les objets nĂ©cessaires, vous pouvez utiliser cette connaissance pour spĂ©cifier le prĂ©requis, en donnant un point de coupure pour limiter les rĂ©visions et les objets qui vont dans le paquet rĂ©sultant. L’exemple prĂ©cĂ©dent a utilisĂ© l’Ă©tiquette dernierpaquetR2 dans ce but, mais vous pouvez utiliser toute autre option que vous donneriez Ă  la commande git-log[1]. Voici d’autres exemples :

Vous pouvez utiliser une étiquette qui est présente dans les deux dépôts :

$ git bundle create monpaquet v1.0.0..master

Vous pouvez utiliser un prérequis défini par le temps :

$ git bundle create monpaquet --since=10.days master

Vous pouvez utiliser le nombre de commits :

$ git bundle create monpaquet -10 master

Vous pouvez lancer git-bundle verify pour voir si vous pouvez extraire d’un paquet qui a Ă©tĂ© crĂ©Ă© avec un prĂ©requis :

$ git bundle verify monpaquet

Cela permettra d’énumérer ce que vous devez avoir pour extraire du paquet et fera une erreur si vous ne les avez pas.

Du point de vue du dĂ©pĂ´t destinataire, un paquet est exactement comme un dĂ©pĂ´t ordinaire dont il extrait ou tire des donnĂ©es. Vous pouvez, par exemple, aligner les rĂ©fĂ©rences lors de l’extraction :

$ git fetch monpaquet master:localRef

Vous pouvez également voir quelles références il offre :

$ git ls-remote monpaquet

FORMATS DE FICHIER

GIT

Fait partie de la suite git[1]

TRADUCTION

Cette page de manuel a été traduite par Jean-Noël Avila <jn.avila AT free DOT fr> et les membres du projet git-manpages-l10n. Veuillez signaler toute erreur de traduction par un rapport de bogue sur le site https://github.com/jnavila/git-manpages-l10n .

scroll-to-top