Setup and Config
Getting and Creating Projects
Basic Snapshotting
Branching and Merging
Sharing and Updating Projects
Inspection and Comparison
Patching
Debugging
External Systems
Server Admin
Guides
- gitattributes
- Command-line interface conventions
- Everyday Git
- Frequently Asked Questions (FAQ)
- Glossary
- Hooks
- gitignore
- gitmodules
- Revisions
- Submodules
- Tutorial
- Workflows
- All guides...
Administration
Plumbing Commands
- 2.47.0 no changes
- 2.46.2 09/23/24
- 2.45.1 → 2.46.1 no changes
- 2.45.0 04/29/24
- 2.44.1 → 2.44.2 no changes
- 2.44.0 02/23/24
- 2.43.1 → 2.43.5 no changes
- 2.43.0 11/20/23
- 2.42.1 → 2.42.3 no changes
- 2.42.0 08/21/23
- 2.41.1 → 2.41.2 no changes
- 2.41.0 06/01/23
- 2.40.1 → 2.40.3 no changes
- 2.40.0 03/12/23
- 2.38.1 → 2.39.5 no changes
- 2.38.0 10/02/22
- 2.36.1 → 2.37.7 no changes
- 2.36.0 04/18/22
- 2.35.1 → 2.35.8 no changes
- 2.35.0 01/24/22
- 2.33.1 → 2.34.8 no changes
- 2.33.0 08/16/21
- 2.32.1 → 2.32.7 no changes
- 2.32.0 06/06/21
- 2.31.1 → 2.31.8 no changes
- 2.31.0 03/15/21
- 2.29.1 → 2.30.9 no changes
- 2.29.0 10/19/20
- 2.28.1 no changes
- 2.28.0 07/27/20
- 2.27.1 no changes
- 2.27.0 06/01/20
- 2.25.2 → 2.26.3 no changes
- 2.25.1 02/17/20
- 2.25.0 01/13/20
- 2.24.1 → 2.24.4 no changes
- 2.24.0 11/04/19
- 2.23.1 → 2.23.4 no changes
- 2.23.0 08/16/19
- 2.22.1 → 2.22.5 no changes
- 2.22.0 06/07/19
- 2.21.1 → 2.21.4 no changes
- 2.21.0 02/24/19
- 2.20.1 → 2.20.5 no changes
- 2.20.0 12/09/18
- 2.19.1 → 2.19.6 no changes
- 2.19.0 09/10/18
- 2.18.1 → 2.18.5 no changes
- 2.18.0 06/21/18
- 2.17.1 → 2.17.6 no changes
- 2.17.0 04/02/18
- 2.15.4 → 2.16.6 no changes
- 2.14.6 12/06/19
- 2.12.5 → 2.13.7 no changes
- 2.11.4 09/22/17
- 2.10.5 09/22/17
- 2.9.5 07/30/17
- 2.8.6 07/30/17
- 2.7.6 07/30/17
- 2.6.7 05/05/17
- 2.5.6 no changes
- 2.4.12 05/05/17
- 2.2.3 → 2.3.10 no changes
- 2.1.4 12/17/14
- 2.0.5 12/17/14
SYNOPSIS
git fetch [<options>] [<dĂ©pĂ´t> [<spĂ©c-de-rĂ©f>…]] git fetch [<options>] <groupe> git fetch --multiple [<options>] [(<dĂ©pĂ´t> | <groupe>)…] git fetch --all [<options>]
DESCRIPTION
Récupérer des branches et/ou des étiquettes (collectivement, "réfs") depuis un ou plusieurs autres dépôts, ainsi que les objets nécessaires pour compléter leur historique. Les branches de suivi à distance sont mises à jour (voir la description de <spéc-de-réf> ci-dessous pour les moyens de contrôler ce comportement).
Par dĂ©faut, toute Ă©tiquette qui pointe vers les historiques recherchĂ©s est Ă©galement recherchĂ©e ; l’effet est de rechercher les Ă©tiquettes qui pointent vers les branches qui vous intĂ©ressent. Ce comportement par dĂ©faut peut ĂŞtre modifiĂ© en utilisant les options --tags ou --no-tags ou en configurant remote.<nom>.tagOpt. En utilisant une spĂ©cification de rĂ©fĂ©rence qui rĂ©cupère les Ă©tiquettes explicitement, vous pouvez Ă©galement rĂ©cupĂ©rer les Ă©tiquettes qui ne pointent pas sur les branches qui vous intĂ©ressent.
git fetch peut aller chercher Ă partir d’un seul dĂ©pĂ´t nommĂ© ou d’une seule URL, ou Ă partir de plusieurs dĂ©pĂ´ts Ă la fois si <groupe> est donnĂ© et qu’il y a une entrĂ©e remotes.<groupe> dans le fichier de configuration. (Voir git-config[1]).
Lorsqu’aucun distant n’est spĂ©cifiĂ©, par dĂ©faut le distant origin
sera utilisĂ©, Ă moins qu’il n’y ait une branche amont configurĂ©e pour la branche courante.
Les noms des refs qui sont rĂ©cupĂ©rĂ©s, ainsi que les noms des objets qu’ils pointent, sont Ă©crits dans .git/FETCH_HEAD
. Ces informations peuvent ĂŞtre utilisĂ©es par des scripts ou d’autres commandes git, telles que git-pull[1].
OPTIONS
- --[no-]all
-
RĂ©cupĂ©rer tous les distants, Ă l’exception de ceux qui ont la variable de configuration
remote.<nom>.skipFetchAll
renseignée. Cela surcharge la variable de configurationfetch.all
. - -a
- --append
-
Ajouter les noms de rĂ©fĂ©rences et les noms d’objets des rĂ©fĂ©rences rĂ©cupĂ©rĂ©es au contenu existant de
.git/FETCH_HEAD
. Sans cette option, les anciennes données dans.git/FETCH_HEAD
seront écrasées. - --atomic
-
Utiliser une transaction atomique pour mettre Ă jour les rĂ©fĂ©rences locales. Soit toutes les rĂ©fĂ©rences sont mises Ă jour, soit, en cas d’erreur, aucune rĂ©fĂ©rence n’est mise Ă jour.
- --depth=<profondeur>
-
Limiter la rĂ©cupĂ©ration au nombre spĂ©cifiĂ© de commits Ă partir du sommet de l’historique de chaque branche distante. Si vous allez chercher dans un dĂ©pĂ´t "superficiel" crĂ©Ă© par
git clone
avec l’option--depth=<profondeur>
(voir git-clone[1]), approfondir ou raccourcir l’historique jusqu’au nombre spĂ©cifiĂ© de validations. Les Ă©tiquettes pour les commits approfondis ne sont pas rĂ©cupĂ©rĂ©es. - --deepen=<profondeur>
-
Semblable Ă --depth, sauf que cela prĂ©cise le nombre de commits Ă partir de la limite actuelle superficielle au lieu du sommet de l’historique de chaque branche distante.
- --shallow-since=<date>
-
Approfondir ou raccourcir l’historique d’un dĂ©pĂ´t superficiel pour inclure tous les commits accessibles après <date>.
- --shallow-exclude=<révision>
-
Approfondir ou raccourcir l’historique d’un dĂ©pĂ´t superficiel afin d’exclure les commits accessibles depuis une branche ou une Ă©tiquette distante spĂ©cifiĂ©e. Cette option peut ĂŞtre spĂ©cifiĂ©e plusieurs fois.
- --unshallow
-
Si le dépôt de sources est complet, convertir un dépôt superficiel en un dépôt complet, en supprimant toutes les limitations imposées par les dépôts superficiels.
Si le dépôt source est superficiel, il faut en extraire le plus possible afin que le dépôt actuel ait le même historique que le dépôt source.
- --update-shallow
-
Par dĂ©faut, lors de la rĂ©cupĂ©ration d’un dĂ©pĂ´t superficiel,
git fetch
refuse les références qui nécessitent une mise à jour de .git/shallow. Cette option met à jour le fichier .git/shallow et accepte de telles références. - --negotiation-tip=<commit|glob>
-
Par dĂ©faut, Git signalera au serveur les commits accessibles Ă partir de toutes les rĂ©fĂ©rences locales pour trouver les commits communs afin de rĂ©duire la taille du fichier de paquet Ă recevoir. Si ceci est spĂ©cifiĂ©, Git ne signalera que les commits accessibles Ă partir des sommets donnĂ©s. Ceci est utile pour accĂ©lĂ©rer les recherches lorsque l’utilisateur sait quelle rĂ©f locale est susceptible d’avoir des commits en commun avec la rĂ©f amont qui est recherchĂ©e.
Cette option peut ĂŞtre spĂ©cifiĂ©e plus d’une fois ; si c’est le cas, Git signalera les commits accessibles Ă partir de l’un des commits donnĂ©s.
L’argument de cette option peut ĂŞtre un glob sur les noms de rĂ©fĂ©rence, une rĂ©fĂ©rence ou le SHA-1 (Ă©ventuellement abrĂ©gĂ©) d’un commit. La spĂ©cification d’un glob Ă©quivaut Ă spĂ©cifier cette option plusieurs fois, une pour chaque nom de rĂ©fĂ©rence correspondant.
Voir aussi les variables de configuration
fetch.negotiationAlgorithm
etpush.negotiate
documentĂ©es dans git-config[1], ainsi que l’option--negotiate-only
ci-après. - --negotiate-only
-
Ne rien récupérer du serveur, et à la place afficher les ancêtres des arguments fournis par
--negotiation-tip=*
, que nous avons en commun avec le serveur.C’est incompatible avec
--recurse-submodules=[yes|on-demand]
. En interne, ceci est utilisĂ© pour implĂ©menter l’optionpush.negotiate
, voir git-config[1]. - --dry-run
-
Montrer ce qui serait fait, sans faire de changements.
- --porcelain
-
Afficher la sortie sur la sortie standard dans un format facile à décrypter pour les scripts. Voir la section SORTIE dans git-fetch[1] pour plus de détails.
C’est incompatible avec
--recurse-submodules=[yes|on-demand]`et a la priorité sur l'option de configuration `fetch.output
. - --[no-]write-fetch-head
-
Ecrire la liste des refs distants récupérés dans le fichier
FETCH_HEAD
directement sous$GIT_DIR
. C’est la valeur par dĂ©faut. Passer--no-write-fetch-head
depuis la ligne de commande indique Ă Git de ne pas Ă©crire le fichier. Avec l’option--dry-run
, le fichier n’est jamais Ă©crit. - -f
- --force
-
Lorsque git fetch est utilisé avec la spécification de référence
<src>:<dst>
, il peut refuser de mettre à jour la branche locale comme cela a été discuté dans la partie<spécificateur-de-référence>
ci-dessous. Cette option permet de passer outre Ă ce contrĂ´le. - -k
- --keep
-
Conserver le paquet téléchargé.
- --multiple
-
Permettre de spécifier plusieurs arguments <dépôt> et <groupe>. Aucun <spécificateur-de-référence> ne peut être spécifié.
- --[no-]auto-maintenance
- --[no-]auto-gc
-
Exécuter
git maintenance --auto
à la fin pour effectuer la maintenance automatique du dépôt si nécessaire. (--[no-]auto-gc
est un synonym.) Ceci est activé par défaut. - --[no-]write-commit-graph
-
Écrire un graphe de commit après avoir récupéré. Ceci remplace le paramètre de configuration
fetch.writeCommitGraph
. - --prefetch
-
Modifier le spĂ©cificateur de rĂ©fĂ©rence configurĂ© pour placer toutes les refs dans l’espace de noms
refs/prefetch/
. Voir la tâcheprefetch
dans git-maintenance[1]. - -p
- --prune
-
Avant de rĂ©cupĂ©rer, supprimer toutes les rĂ©fĂ©rences de suivi Ă distance qui n’existent plus sur le dĂ©pĂ´t distant. Les Ă©tiquettes ne sont pas sujettes Ă l’Ă©lagage si elles ne sont rĂ©cupĂ©rĂ©es qu’en raison du suivi automatique de l’Ă©tiquette par dĂ©faut ou en raison d’une option --tags. Cependant, si les Ă©tiquettes sont rĂ©cupĂ©rĂ©es en raison d’un spĂ©cificateur de rĂ©fĂ©rence explicite (soit en ligne de commande, soit dans la configuration distante, par exemple si le dĂ©pĂ´t distant a Ă©tĂ© clonĂ© avec l’option --mirror), alors elles sont Ă©galement sujettes Ă l’Ă©lagage. La fourniture de
--prune-tags
est une abrĂ©viation pour la fourniture du spĂ©cificateur de rĂ©fĂ©rence d’Ă©tiquette.Voir la section ÉLAGAGE ci-dessous pour plus de dĂ©tails.
- -P
- --prune-tags
-
Avant de rĂ©cupĂ©rer, supprimer toutes les Ă©tiquettes locales qui n’existent plus sur le distant si
--prune
est activĂ©. Cette option doit ĂŞtre utilisĂ©e avec plus de prĂ©caution, car contrairement Ă--prune
, elle supprime toutes les rĂ©fĂ©rences locales (Ă©tiquettes locales) qui ont Ă©tĂ© crĂ©Ă©es. Cette option est un raccourci pour la fourniture du spĂ©cificateur de rĂ©fĂ©rence d’Ă©tiquette explicite avec--prune
, voir la discussion à ce sujet dans sa documentation.Voir la section ÉLAGAGE ci-dessous pour plus de détails.
- -n
- --no-tags
-
Par dĂ©faut, les Ă©tiquettes qui pointent sur des objets tĂ©lĂ©chargĂ©s Ă partir du dĂ©pĂ´t distant sont rĂ©cupĂ©rĂ©es et stockĂ©es localement. Cette option dĂ©sactive le suivi automatique des Ă©tiquettes. Le comportement par dĂ©faut d’un distant peut ĂŞtre spĂ©cifiĂ© avec le paramètre remote.<nom>.tagOpt. Voir git-config[1].
- --refetch
-
Au lieu de négocier avec le serveur pour éviter de transférer les commits et les objets associés qui sont déjà présents localement, cette option récupère tous les objets comme le ferait un nouveau clone. Utilisez cette option pour réappliquer un filtre de clone partiel depuis la configuration ou en utilisant
--filter=
lorsque la définition du filtre a changé. La maintenance automatique post-récupération effectuera une consolidation des paquets de la base de données des objets pour supprimer tout objet en double. - --refmap=<spécificateur-de-référence>
-
Lors de la récupération des références listées en ligne de commande, utiliser la spécification de référence (qui peut être donnée plusieurs fois) pour mapper les références sur les branches de suivi à distance, au lieu des valeurs des variables de configuration
remote.*.fetch
pour le dépôt distant. Fournir un<spécificateur-de-référence>
vide Ă l’option--refmap
fait que Git ignore les spécification de référence configurées et se fie entièrement aux spécifications de référence fournies comme arguments de la ligne de commande. Voir la section sur les "Branches de suivi à distance configurées" pour plus de détails. - -t
- --tags
-
RĂ©cupĂ©rer toutes les Ă©tiquettes Ă distance (c’est-Ă -dire, rĂ©cupĂ©rer les Ă©tiquettes
refs/tags/*
dans les Ă©tiquettes locales avec le mĂŞme nom), en plus de tout ce qui serait rĂ©cupĂ©rĂ© autrement. L’utilisation de cette seule option ne soumet pas les Ă©tiquettes Ă un Ă©lagage, mĂŞme si --prune est utilisĂ© (bien que les Ă©tiquettes puissent ĂŞtre Ă©laguĂ©es de toute façon si elles sont aussi la destination d’une spĂ©cification de rĂ©fĂ©rence explicite ; voir--prune
). - --recurse-submodules[=(yes|on-demand|no)]
-
Cette option contrĂ´le si et sous quelles conditions les nouveaux commits des sous-modules doivent ĂŞtre rĂ©cupĂ©rĂ©s Ă©galement. Lorsqu’il parcourt les sous-modules,
git fetch
essaie toujours de rĂ©cupĂ©rer les sous-modules "modifiĂ©s", c’est-Ă -dire les sous-modules qui ont des commits rĂ©fĂ©rencĂ©s par un commit de superprojet rĂ©cemment rĂ©cupĂ©rĂ© mais qui sont manquants dans le clone de sous-module local. Un sous-module modifiĂ© peut ĂŞtre rĂ©cupĂ©rĂ© tant qu’il est prĂ©sent localement, par exemple dans$GIT_DIR/modules/
(voir gitsubmodules[7]) ; si l’amont ajoute un nouveau sous-module, ce sous-module ne peut pas ĂŞtre rĂ©cupĂ©rĂ© jusqu’Ă ce qu’il soit clonĂ©, par exemple pargit submodule update
.Lorsqu’il est dĂ©fini sur on-demand, seuls les sous-modules modifiĂ©s sont rĂ©cupĂ©rĂ©s. Lorsqu’il a pour valeur yes, tous les sous-modules peuplĂ©s sont rĂ©cupĂ©rĂ©s et les sous-modules non peuplĂ©s et modifiĂ©s sont rĂ©cupĂ©rĂ©s. Avec la valeur no, les sous-modules ne sont jamais rĂ©cupĂ©rĂ©s.
Lorsque cette option n’est pas spĂ©cifiĂ©e, elle utilise la valeur de
fetch.recurseSubmodules
si elle est dĂ©finie (voir git-config[1]), et prend par dĂ©faut la valeur on-demand si elle n’est pas dĂ©finie. Lorsque cette option est utilisĂ©e sans aucune valeur, elle prend par dĂ©faut la valeur yes. - -j
- --jobs=<n>
-
Nombre d’enfants parallèles Ă utiliser pour toutes les formes d’extraction.
Si l’option
--multiple
a été spécifiée, les différents distants seront récupérés en parallèle. Si plusieurs sous-modules sont récupérés, ils seront récupérés en parallèle. Pour les contrôler indépendamment, utilisez les paramètres de configurationfetch.parallel
etsubmodule.fetchJobs
(voir git-config[1]).Généralement, les recherches récursives parallèles et sur des distants multiples seront plus rapides. Par défaut, les recherches sont effectuées de manière séquentielle, et non en parallèle.
- --no-recurse-submodules
-
DĂ©sactiver la rĂ©cupĂ©ration rĂ©cursive des sous-modules (cela a le mĂŞme effet que d’utiliser l’option
--recurse-submodules=no
). - --set-upstream
-
Si le distant est rĂ©cupĂ©rĂ© avec succès, ajouter la rĂ©fĂ©rence (de suivi) amont , utilisĂ©e par les commandes sans argument git-pull[1] et autres. Pour plus d’informations, voir
branch.<nom>.merge
etbranch.<nom>.remote
dans git-config[1]. - --submodule-prefix=<chemin>
-
Préfixer <chemin> aux chemins affichés dans les messages informatifs tels que "Récupération du sous-module foo". Cette option est utilisée en interne lors de la récursion sur les sous-modules.
- --recurse-submodules-default=[yes|on-demand]
-
Cette option est utilisĂ©e en interne pour fournir temporairement une valeur par dĂ©faut non nĂ©gative pour l’option --recurse-submodules. Toutes les autres mĂ©thodes de configuration de la rĂ©cupĂ©ration rĂ©cursive des sous-module (comme les paramètres de gitmodules[5] et git-config[1]) remplacent cette option, tout comme le fait de spĂ©cifier directement --[no-]recurse-submodules.
- -u
- --update-head-ok
-
Par dĂ©faut, git fetch refuse de mettre Ă jour la tĂŞte qui correspond Ă la branche en cours. Ce drapeau dĂ©sactive la vĂ©rification. C’est purement pour l’usage interne de git pull pour communiquer avec git fetch, et Ă moins que vous n’implĂ©mentiez votre propre Porcelaine, vous n’ĂŞtes pas censĂ© l’utiliser.
- --upload-pack <upload-pack>
-
Lorsqu’il est donnĂ©, et que le dĂ©pĂ´t Ă rĂ©cupĂ©rer est gĂ©rĂ© par git fetch-pack,
--exec=<upload-pack>
est passĂ© Ă la commande pour spĂ©cifier le chemin par dĂ©faut pour la commande exĂ©cutĂ©e Ă l’autre bout. - -q
- --quiet
-
Passer --quiet pour git-fetch-pack et faire taire toute autre commande git utilisĂ©e en interne. La progression n’est pas signalĂ©e dans le flux d’erreurs standard.
- -v
- --verbose
-
Mode bavard.
- --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.
- -o <option>
- --server-option=<option>
-
Transmettre la chaĂ®ne donnĂ©e au serveur lors d’une communication utilisant la version 2 du protocole. La chaĂ®ne donnĂ©e ne doit pas contenir de caractère NUL ou LF. La gestion par le serveur des options du serveur, y compris les options inconnues, est spĂ©cifique au serveur. Lorsque plusieurs
--server-option=<option>
sont donnĂ©s, ils sont tous envoyĂ©s Ă l’autre cĂ´tĂ© dans l’ordre indiquĂ© sur la ligne de commande. - --show-forced-updates
-
Par dĂ©faut, git vĂ©rifie si une branche est mise Ă jour de force pendant la rĂ©cupĂ©ration. Cela peut ĂŞtre dĂ©sactivĂ© via fetch.showForcedUpdates, mais l’option --show-forced-updates garantit que cette vĂ©rification a lieu. Voir git-config[1].
- --no-show-forced-updates
-
Par dĂ©faut, git vĂ©rifie si une branche est mise Ă jour de force pendant la rĂ©cupĂ©ration. Passer --no-show-forced-updates ou rĂ©gler fetch.showForcedUpdates Ă false pour sauter cette vĂ©rification pour des raisons de performance. Si elle est utilisĂ©e pendant git-pull, l’option --ff-only vĂ©rifiera toujours les mises Ă jour forcĂ©es avant de tenter une mise Ă jour rapide. Voir git-config[1].
- -4
- --ipv4
-
Utiliser uniquement les adresses IPv4, en ignorant les adresses IPv6.
- -6
- --ipv6
-
Utiliser uniquement les adresses IPv6, en ignorant les adresses IPv4.
- <dépôt>
-
Le dĂ©pĂ´t "distant" qui est la source d’une opĂ©ration de rĂ©cupĂ©ration ou de tirage. Ce paramètre peut ĂŞtre soit une URL (voir la section URLS GIT ci-dessous) soit le nom d’un remote (voir la section DISTANTS ci-dessous).
- <groupe>
-
Un nom faisant référence à une liste des dépôts comme la valeur de remotes.<groupe> dans le fichier de configuration. (voir git-config[1]).
- <spécificateur-de-référence>
-
PrĂ©ciser les rĂ©fĂ©rences Ă rĂ©cupĂ©rer et les rĂ©fĂ©rences locales Ă mettre Ă jour. Lorsqu’aucun <spĂ©c-de-rĂ©f> n’apparaĂ®t sur la ligne de commande, les rĂ©fĂ©rences Ă rĂ©cupĂ©rer sont lues Ă partir des variables
remote.<dépôt>.fetch
Ă la place (voir BRANCHES DE SUIVI Ă€ DISTANCE CONFIGURÉES ci-dessous).Le format d’un paramètre <spĂ©c-de-rĂ©f> est un plus
+
optionnel, suivi de la source <src>, suivi de deux points:
, suivi de la destination ref <dst>. Les deux points peuvent ĂŞtre omis lorsque <dst> est vide. <src> est typiquement une rĂ©f, mais cela peut aussi ĂŞtre un nom d’objet hexadĂ©cimal entier.Un <spec-de-rĂ©f> peut contenir un
*
dans son <src> pour indiquer une simple correspondance de motif. Un tel refspec fonctionne comme un motif qui correspond Ă n’importe quelle ref avec le mĂŞme prĂ©fixe. Un motif <spec-de-rĂ©f> doit avoir un*
dans les deux <src> et <dst>. Il va faire correspondre les références à la destination en remplaçant le*
par le contenu correspondant de la source.Si un spécificateur de référence est préfixé par
^
, il sera interprĂ©tĂ© comme un spĂ©cificateur de rĂ©fĂ©rence nĂ©gatif. PlutĂ´t que de spĂ©cifier les rĂ©fĂ©rences Ă rĂ©cupĂ©rer ou les rĂ©fĂ©rences locales Ă mettre Ă jour, un tel spĂ©cificateur de rĂ©fĂ©rence spĂ©cifiera les rĂ©fĂ©rences Ă exclure. Une rĂ©fĂ©rence sera considĂ©rĂ©e comme correspondante si elle correspond Ă au moins une rĂ©fĂ©rence positive, et ne correspond Ă aucune rĂ©fĂ©rence nĂ©gative. Les spĂ©cificateurs de rĂ©fĂ©rence nĂ©gatifs peuvent ĂŞtre utiles pour restreindre le champ d’application d’un spĂ©cificateur modèle de rĂ©fĂ©rence afin qu’il n’inclue pas de rĂ©fĂ©rences spĂ©cifiques. Les spĂ©cificateurs de rĂ©fĂ©rence nĂ©gatifs peuvent eux-mĂŞmes ĂŞtre des spĂ©cificateurs modèles de rĂ©fĂ©rence . Cependant, ils ne peuvent contenir qu’un <src> et ne peuvent pas spĂ©cifier un <dst>. Les noms d’objets hexagonaux complets ne sont pas non plus pris en charge.tag <Ă©tiquette>
signifie la mĂŞme chose querefs/tags/<tag>:refs/tags/<tag>
; cela demande de tout rĂ©cupĂ©rer jusqu’Ă l’Ă©tiquette donnĂ©e.La rĂ©fĂ©rence distante qui correspond Ă <src> est rĂ©cupĂ©rĂ©e, et si <dst> n’est pas une chaĂ®ne vide, une tentative est faite pour mettre Ă jour la rĂ©fĂ©rence locale qui lui correspond.
Le fait que cette mise à jour soit autorisée sans
--force
dĂ©pend de l’espace de noms de rĂ©fĂ©rence vers lequel elle est rĂ©cupĂ©rĂ©e, du type d’objet rĂ©cupĂ©rĂ©, et si la mise Ă jour est considĂ©rĂ©e comme une avance rapide. GĂ©nĂ©ralement, les mĂŞmes règles s’appliquent pour la rĂ©cupĂ©ration que pour la poussĂ©e, voir la section<spĂ©c-de-rĂ©f>...
de git-push[1] pour les connaĂ®tre. Les exceptions Ă ces règles particulières Ă git fetch sont notĂ©es ci-dessous.Jusqu’Ă la version 2.20 de Git, et contrairement Ă ce qui se passe avec git-push[1], toute mise Ă jour de
refs/tags/*
serait acceptée sans+
dans la spéc-de-réf (ou--force
). Lors de la rĂ©cupĂ©ration, nous considĂ©rons sans distinction toutes les mises Ă jour d’Ă©tiquettes depuis un dĂ©pĂ´t distance comme des rĂ©cupĂ©rations forcĂ©es. Depuis la version 2.20 de Git, la rĂ©cupĂ©ration pour mettre Ă jour lesrefs/tags/*
fonctionne de la mĂŞme manière que lors de la poussĂ©e. C’est-Ă -dire que toute mise Ă jour sera rejetĂ©e sans "+" dans le spĂ©cificateur de rĂ©fĂ©rence (ou--force
).Contrairement à une poussée avec git-push[1], toute mise à jour en dehors de
refs/{tags,heads}/*
sera acceptée sans+
dans le spéc-de-réf (ou--force
), que ce soit en Ă©changeant par exemple un objet arbre pour un blob, ou un commit pour un autre commit qui n’a pas le commit prĂ©cĂ©dent comme ancĂŞtre etc.Contrairement Ă une poussĂ©e avec git-push[1], il n’y a pas de configuration qui modifie ces règles, et rien de tel qu’un crochet prĂ©-rĂ©cupĂ©ration
pre-fetch
analogue Ă celui de prĂ©-rĂ©ception`pre-receive`.Comme pour la poussĂ©e avec git-push[1], toutes les règles dĂ©crites ci-dessus concernant ce qui n’est pas autorisĂ© comme une mise Ă jour, peuvent ĂŞtre annulĂ©es en ajoutant un "+" optionnel Ă un spĂ©cificateur de rĂ©fĂ©rence (ou en utilisant l’option de ligne de commande
--force
). La seule exception Ă cette règle est qu’aucun forçage ne fera accepter Ă l’espace de nomsrefs/heads/*
un objet non commit.NoteLorsque la branche distante que vous voulez rĂ©cupĂ©rer est connue pour ĂŞtre rĂ©gulièrement rembobinĂ©e et rebasĂ©e, on s’attend Ă ce que son nouveau sommet ne soit pas un descendant de son sommet prĂ©cĂ©dent (telle qu’il Ă©tait stockĂ© dans votre branche de suivi Ă distance la dernière fois que vous l’avez rĂ©cupĂ©rĂ©). Vous pouvez utiliser le signe "+" pour indiquer que des mises Ă jour non en avance rapide seront nĂ©cessaires pour ces branches. Il n’y a aucun moyen de dĂ©terminer ou de dĂ©clarer qu’une branche sera rendue disponible dans un dĂ©pĂ´t avec ce comportement ; l’utilisateur qui tire doit simplement savoir que c’est le modèle d’utilisation attendu pour une branche.
URL GIT
En gĂ©nĂ©ral, les URL contiennent une information sur le protocole de transport, l’adresse du serveur distant et le chemin vers le dĂ©pĂ´t. En fonction du protocole de transport, certaines de ces informations peuvent ĂŞtre absentes.
Git supporte les protocoles ssh, git, http et https (en plus, ftp et ftps peuvent être utilisés pour la récupération, mais ceux-ci sont inefficaces et déconseillés ; ne les utilisez pas).
Le transport natif (c’est-Ă -dire l’URL git://) n’utilise pas d’authentification et ne devrait ĂŞtre utilisĂ© qu’avec prĂ©caution sur des rĂ©seaux non sĂ©curisĂ©s.
Les syntaxes suivantes peuvent être utilisées avec eux :
-
ssh://
[<utilisateur>@
]<hĂ´te>[:
<port>]/
<chemin-du-dépôt-git> -
git://
<hĂ´te>[:<port>]/
<chemin-du-dépôt-git> -
http
[s
]://
<hĂ´tet>[:
<port>]/
<chemin-du-dépôt-git> -
ftp
[s
]://
<hĂ´te>[:
<port>]/
<chemin-du-dépôt-git>
Une syntaxe alternative de type scp peut aussi être utilisée pour le protocole ssh :
-
[<utilisateur>
@
]<hĂ´te>:/
<chemin-du-dépôt-git>
Cette syntaxe n’est reconnue que s’il n’y a pas de barre oblique devant les premiers deux-points. Cela permet de prendre en charge des chemins locaux qui contiendraient des deux-points. Par exemple, le chemin local toto:titi
pourrait être spécifié comme un chemin absolu ou ./toto:titi
pour Ă©viter d’ĂŞtre interprĂ©tĂ© comme une url ssh.
Les protocoles ssh et git supportent en plus l’expansion ~
<utilisateur>  :
-
ssh://
[<utilisateur>@
]<hĂ´te>[:
<port>]/~
<utilisateur>/
<chemin-du-dépôt-git> -
git://
<hĂ´te>[:
<port>]/~
<utilisateur>/
<chemin-du-dépôt-git> -
[<utilisateur>
@
]<hĂ´te>:~
<utilisateur>/
<chemin-du-dépôt-git>
Pour les dépôts locaux, supportés aussi nativement par Git, les syntaxes suivantes sont aussi admises :
-
/chemin/du/dépôt.git/
Ces deux syntaxes sont Ă peu près Ă©quivalentes, Ă part lors d’un clonage, oĂą la première implique l’option --local
. Voir git-clone[1] pour plus de détails.
git clone
, git fetch
et git pull
, mais pas git push
, acceptent également un fichier paquet approprié. Voir git-bundle[1].
Quand Git ne sait pas comment gĂ©rer un certain protocole, il essaie d’utiliser l’assistant de gestion de distant remote-
<transport>, s’il existe. Pour requĂ©rir l’emploi d’un assistant spĂ©cifique, la syntaxe suivante peut ĂŞtre utilisĂ©e :
-
<transport>::<adresse>
oĂą <adresse> peut ĂŞtre un chemin, un serveur et chemin, ou une chaĂ®ne URL arbitraire reconnue par l’assistant de gestion de distant invoquĂ©. Voir gitremote-helpers[7] pour plus de dĂ©tails.
S’il y a un grand nombre de dĂ©pĂ´ts aux noms similaires et que vous souhaitez utiliser un format diffĂ©rent pour eux (de telle sorte que les URL que vous utiliserez seront rĂ©Ă©crites en URL fonctionnelles), vous pouvez crĂ©er une section de configuration de la forme :
[url "<veritable-base-d-url>"] insteadOf = <autre-base-d’URL>
Par exemple, avec ceci :
[url "git://git.host.xz/"] insteadOf = host.xz:/chemin/vers/ insteadOf = travail:
une URL comme « travail:depot.git » ou « host.xz:/chemin/vers/depot.git » sera réécrite dans tout contexte qui requiert une URL en « git://git.host.xz/depot.git ».
Si vous souhaitez réécrire les URL seulement pour pousser, vous pouvez créer une section de configuration de la forme :
[url "<veritable-base-d’URL>"] pushInsteadOf = <autre-base-d-URL>
Par exemple, avec ceci :
[url "ssh://exemple.org/"] pushInsteadOf = git://exemple.org/
une URL telle que « git://exemple.org/chemin/vers/le/depot.git » sera rĂ©Ă©crite en « ssh://exemple.org/chemin/vers/le/depot.git » pour les poussĂ©es, mais les tirages utiliseront encore l’URL originale.
DISTANTS
Le nom de l’un des Ă©lĂ©ments suivants peut ĂŞtre utilisĂ© Ă la place d’une URL en tant qu’argument <dĂ©pĂ´t>
:
-
un distant dans le fichier de configuration Git :
$GIT_DIR/config
, -
un fichier dans le répertoire
$GIT_DIR/remotes
, ou -
un fichier dans le répertoire
$GIT_DIR/branches
.
Toutes ces options vous permettent Ă©galement d’omettre le spĂ©cificateur de rĂ©fĂ©rence de la ligne de commande car elles contiennent chacune un spĂ©cificateur de rĂ©fĂ©rence que git utilisera par dĂ©faut.
distant nommé dans le fichier de configuration
Vous pouvez choisir de fournir le nom d’un distant que vous aviez prĂ©cĂ©demment configurĂ© en utilisant git-remote[1], git-config[1] ou mĂŞme par une modification manuelle du fichier $GIT_DIR/config
. L’URL de ce distant sera utilisĂ©e pour accĂ©der au dĂ©pĂ´t. Le spĂ©cificateur de rĂ©fĂ©rence de ce distant sera utilisĂ© par dĂ©faut lorsque vous ne fournissez pas de spĂ©cificateur de rĂ©fĂ©rence sur la ligne de commande. L’entrĂ©e dans le fichier de configuration apparaĂ®tra comme ceci :
[remote "<nom>"] url = <URL> pushurl = <url-poussée> push = <spéc-de-réf> fetch = <spéc-de-réf>
Le <url-de-poussée>
est utilisé uniquement pour les poussées. Il est optionnel et sa valeur par défaut est <URL>
. Pousser vers un distant affecte tous les urls-de-poussĂ©s dĂ©finis ou tous les urls dĂ©finis si aucun url-de-poussĂ©e n’est dĂ©fini. Fetch, cependant, ne rĂ©cupĂ©rera que le premier url dĂ©fini si plusieurs urls sont dĂ©finis.
Fichier nommé dans $GIT_DIR/remotes
Vous pouvez choisir de fournir le nom d’un fichier dans $GIT_DIR/remotes
. L’URL dans ce fichier sera utilisĂ©e pour accĂ©der au dĂ©pĂ´t. Le spĂ©cificateur de rĂ©fĂ©rence dans ce fichier sera utilisĂ© par dĂ©faut lorsque vous ne fournissez pas de spĂ©cificateur de rĂ©fĂ©rence sur la ligne de commande. Ce fichier doit avoir le format suivant :
URL: un des format d'URL ci-dessus Push: <spéc-de-réf> Pull: <spéc-de-réf>
Les lignes Push:
" sont utilisées par git push et les lignes Pull:
sont utilisées par git pull et git fetch. Des lignes Push:
et Pull:
multiples peuvent être spécifiées pour des mappages supplémentaires de branches.
Fichier nommé dans $GIT_DIR/branches
Vous pouvez choisir de fournir le nom d’un fichier dans $GIT_DIR/branches
. L’URL de ce fichier sera utilisĂ©e pour accĂ©der au dĂ©pĂ´t. Ce fichier doit avoir le format suivant :
<URL>#<tĂŞte>
<URL>
est obligatoire ; #<tĂŞte>
est facultatif.
En fonction de l’opĂ©ration, git utilisera l’un des spĂ©cificateurs de rĂ©fĂ©rence suivants, si vous n’en fournissez pas un en ligne de commande. <branche>
est le nom de ce fichier dans $GIT_DIR/branches
et <tĂŞte>
vaut par défaut master
.
git fetch utilise :
refs/heads/<tĂŞte>:refs/heads/<branche>
git push utilise :
HEAD:refs/heads/<tĂŞte>
LES BRANCHES DE SUIVI À DISTANCE CONFIGURÉES
Vous interagissez souvent avec le mĂŞme dĂ©pĂ´t distant en y allant rĂ©gulièrement et de manière rĂ©pĂ©tĂ©e. Afin de suivre la progression d’un tel dĂ©pĂ´t distant, git fetch
vous permet de configurer les variables de configuration remote.<dépôt>.fetch
.
En général, une telle variable peut ressembler à ceci :
[remote "origin"] fetch = +refs/heads/*:refs/remotes/origin/*
Cette configuration est utilisée de deux façons :
-
Lorsque
git fetch
est lancé sans spécifier les branches et/ou les étiquettes à récupérer en ligne de commande, par exemplegit fetch origin
ougit fetch
, les valeursremote.<dépôt>.fetch
sont utilisĂ©es comme spĂ©c-de-rĂ©f --elles spĂ©cifient quelles rĂ©fs Ă rĂ©cupĂ©rer et quelles rĂ©fs locales Ă mettre Ă jour. L’exemple ci-dessus va chercher toutes les branches qui existent dansorigin
(c’est-Ă -dire toute rĂ©f qui correspond au cĂ´tĂ© gauche de la valeur, "refs/heads/*") et mettre Ă jour les branches de suivi Ă distance correspondantes dans la hiĂ©rarchierefs/remotes/origin/*
. -
Lorsque
git fetch
est lancé avec des branches et/ou des étiquettes explicites à récupérer en ligne de commande, par exemplegit fetch origin master
, les <spéc-de-réf>s données en ligne de commande déterminent ce qui doit être récupéré (par exemplemaster
dans l’exemple, qui est un raccourci pourmaster:
, ce qui signifie "chercher la branche master mais je ne dis pas explicitement quelle branche de suivi Ă distance mettre Ă jour avec elle depuis la ligne de commande"), et la commande de l’exemple ne cherchera que la branche master. Les valeurs deremote.<dĂ©pĂ´t>.fetch
dĂ©terminent quelle branche de suivi Ă distance, s’il y en a une, est mise Ă jour. Lorsqu’elles sont utilisĂ©es de cette façon, les valeurs deremote.<dĂ©pĂ´t>.fetch
n’ont aucun effet sur la dĂ©cision de ce qui est rĂ©cupĂ©rĂ© (c’est-Ă -dire que les valeurs ne sont pas utilisĂ©es comme spĂ©c-de-rĂ©f lorsque la ligne de commande liste les spĂ©c-de-rĂ©fs) ; elles ne sont utilisĂ©es que pour dĂ©cider de l’endroit oĂą les rĂ©fs qui sont rĂ©cupĂ©rĂ©es sont stockĂ©es en agissant comme une table de correspondance.
Cette dernière utilisation des valeurs de remote.<dépôt>.fetch
peut être écrasée en donnant le(s) paramètre(s) --refmap=<spéc-de-réf>
sur la ligne de commande.
ÉLAGAGE
Par dĂ©faut, Git conserve les donnĂ©es Ă moins qu’elles ne soient explicitement jetĂ©es ; cela s’Ă©tend Ă la conservation des rĂ©fĂ©rences locales aux branches des distants qui ont eux-mĂŞmes supprimĂ© ces branches.
Si on les laisse s’accumuler, ces rĂ©fĂ©rences pĂ©rimĂ©es pourraient rendre les performances mauvaises sur les gros dĂ©pĂ´t qui ont beaucoup de branches, et par exemple rendre la sortie de commandes comme git branch -a --contains <commit>
inutilement verbeuse, ainsi qu’avoir un impact sur tout ce qui travaillera avec l’ensemble des rĂ©fĂ©rences connues.
Ces rĂ©fĂ©rences de suivi Ă distance peuvent ĂŞtre supprimĂ©es une seule fois avec l’une ou l’autre des commandes suivantes :
# Pendant la récupération $ git fetch --prune <nom> # Élaguer seulement, ne pas récupére $ git remote prune <nom>
Pour Ă©laguer les rĂ©fĂ©rences dans le cadre de votre flux de travail normal sans avoir besoin de vous rappeler de l’exĂ©cuter, dĂ©finissez fetch.prune
globalement, ou remote.<nom>.prune
pour chaque dépôt distant dans la configuration. Voir git-config[1].
C’est lĂ que les choses deviennent dĂ©licates et plus spĂ©cifiques. La fonction d’Ă©lagage ne se prĂ©occupe pas vraiment des branches, elle va plutĂ´t Ă©laguer les rĂ©fĂ©rences locales ←→ Ă distance en fonction du spĂ©cificateur de rĂ©fĂ©rence du dĂ©pĂ´t distant (voir <spĂ©c-de-rĂ©f>
et BRANCHES DE SUIVI À DISTANCE CONFIGURÉES ci-dessus).
Par conséquent, si le spécificateur de référence du serveur distant inclut par exemple refs/tags/*:refs/tags/*
, ou si vous lancez manuellement par exemple git fetch --prune <nom> "refs/tags/*:refs/tags/*"
, ce ne seront pas les branches de suivi Ă distance qui seront supprimĂ©es, mais toute Ă©tiquette locale qui n’existe pas sur le serveur distant.
Ce n’est peut-ĂŞtre pas ce Ă quoi vous vous attendez, c’est-Ă -dire que vous voulez Ă©laguer le server distant <nom>
, mais aussi y récupérer explicitement des étiquettes, de sorte que lorsque vous le récupérez, vous supprimez toutes vos étiquettes locales, dont la plupart ne proviennent pas du dépôt distant <nom>
au départ.
Soyez donc prudent lorsque vous utilisez un spécificateur de référence comme refs/tags/*:refs/tags/*
, ou toute autre spécificateur de référence qui pourrait faire correspondre des références de plusieurs dépôts distants au même espace de noms local.
Étant donnĂ© que la mise Ă jour des branches et des Ă©tiquettes sur le dĂ©pĂ´t distant est un cas d’utilisation courant, l’option --prune-tags
peut ĂŞtre fournie avec --prune
pour Ă©laguer les Ă©tiquettes locales qui n’existent pas sur le dĂ©pĂ´t distant, et forcer la mise Ă jour des Ă©tiquettes qui diffèrent. L’Ă©lagage des Ă©tiquettes peut Ă©galement ĂŞtre activĂ© avec fetch.pruneTags
ou remote.<nom>.pruneTags
dans la configuration. Voir git-config[1].
L’option --prune-tags
est Ă©quivalente Ă avoir refs/tags/*:refs/tags/*
déclaré dans les spécificateurs de référence du dépôt distant. Cela peut conduire à des interactions apparemment étranges :
# Ces deux ligne vont chercher les Ă©tiquettes $ git fetch --no-tags origin 'refs/tags/*:refs/tags/* $ git fetch --no-tags --prune-tags origin
La raison pour laquelle il ne gĂ©nère pas d’erreur lorsqu’il est fourni sans --prune
ou ses pendants en configuration est pour la flexibilité des versions configurées et pour maintenir un mappage 1 = 1 entre ce que font les drapeaux de ligne de commande et ce que font les versions de configuration.
Il est raisonnable, par exemple de configurer fetch.pruneTags = true
dans` ~ / .gitconfig` pour que les étiquettes soient élaguées chaque fois que git fetch --prune
est exécuté, sans que chaque appel de git fetch
sans --prune
soit une erreur.
L’Ă©lagage des Ă©tiquettes avec --prune-tags
fonctionne Ă©galement lors de la rĂ©cupĂ©ration d’une URL au lieu d’un dĂ©pĂ´t distant nommĂ©. Toutes ces lignes Ă©lagueront les Ă©tiquettes non trouvĂ©es sur origin :
$ git fetch origin --prune --prune-tags $ git fetch origin --prune 'refs/tags/*:refs/tags/* $ git fetch <url-d-origin> --prune --prune-tags $ git fetch <url-d-origin> --prune 'refs/tags/*:refs/tags/*
SORTIE
La sortie de "git fetch" dépend de la méthode de transport utilisée ; cette section décrit la sortie lors de la récupération sur le protocole Git (soit localement soit via ssh) et le protocole Smart HTTP.
L’Ă©tat de la rĂ©cupĂ©ration est affichĂ© sous forme de tableau, chaque ligne reprĂ©sentant l’Ă©tat d’une seule rĂ©fĂ©rence. Chaque ligne est de la forme :
<drapeau> <résumé> <de> -> <à > [<raison>]
Lorsque vous utilisez --porcelain
, le format de sortie est destinĂ© Ă ĂŞtre analysĂ© par la machine. Contrairement aux formats de sortie lisibles par l’homme, il s’imprime donc sur la sortie standard au lieu de l’erreur standard. Chaque ligne est de la forme :
<drapeau> <ancien-id-objet> <nouveau-id-objet> <référence-locale>
L’Ă©tat des rĂ©fĂ©rences Ă jour n’est affichĂ© que si l’option --verbose est utilisĂ©e.
En mode de sortie compact, spĂ©cifiĂ© avec la variable de configuration fetch.output, si l’un des deux <de>
ou <Ă >
est trouvĂ© dans l’autre chaĂ®ne, il sera substituĂ© par *
dans l’autre chaĂ®ne. Par exemple, master -> origin/master
devient master -> origin/*
.
- drapeau
-
Un seul caractère indiquant le statut de la référence :
- (espace)
-
pour une récupération en avance rapide réussie ;
-
+
-
pour une mise à jour forcée avec succès ;
-
-
-
pour une ref. élaguée avec succès ;
-
t
-
pour une mise Ă jour d’Ă©tiquette avec succès ;
-
*
-
pour la rĂ©cupĂ©ration rĂ©ussie d’une nouvelle rĂ©f. ;
-
!
-
pour une rĂ©fĂ©rence qui a Ă©tĂ© rejetĂ©e ou qui n’a pas pu ĂŞtre mise Ă jour ; et
-
=
-
pour une rĂ©fĂ©rence qui Ă©tait Ă jour et n’avait pas besoin d’ĂŞtre rĂ©cupĂ©rĂ©e.
- résumé
-
Pour une réf récupérée avec succès, le résumé montre les anciennes et les nouvelles valeurs de la réf sous une forme qui peut être utilisée comme argument pour
git log
(c’est<ancien>..<nouveau>
dans la plupart des cas, et<ancien>...<nouveau>
pour les mises à jour forcées pas en avance rapide). - de
-
Le nom de la référence distante récupérée, moins son préfixe "refs/<type>/". En cas de suppression, le nom de la référence distante est "(none)".
- Ă
-
Le nom de la référence locale en cours de mise à jour, moins son préfixe
refs/<type>/
. - raison
-
Une explication comprĂ©hensible. Dans le cas des rĂ©fĂ©rences qui ont Ă©tĂ© rĂ©cupĂ©rĂ©es avec succès, aucune explication n’est nĂ©cessaire. Dans le cas d’une rĂ©fĂ©rence en Ă©chec, la raison de l’Ă©chec est dĂ©crite.
EXEMPLES
-
Mettre à jour les branches de suivi distantes :
$ git fetch origin
La commande ci-dessus copie toutes les branches de l’espace de nom distant
refs/heads/
et les stocke dans l’espace de noms localrefs/remotes/origin/
, sauf si l’optionremote. <dĂ©pĂ´t> .fetch
est utilisée pour spécifier un spécificateur de référence autre que celui par défaut. -
En utilisant explicitement les spécificateurs de référence :
$ git fetch origin +seen:seen maint:tmp
Cela met à jour (ou crée, si nécessaire) les branches
seen
ettmp
dans le dépôt local en récupérant (respectivement) les branchesseen
etmaint
dans le dépôt distant.La branche
seen
sera mise Ă jour mĂŞme si ce n’est pas en avance rapide, car elle est prĂ©fixĂ©e par un signe plus ;tmp
ne le sera pas. -
Jette un coup d’Ĺ“il Ă la branche d’un dĂ©pĂ´t distant, sans configurer le distant dans votre dĂ©pĂ´t local :
$ git fetch git://git.kernel.org/pub/scm/git/git.git maint $ git log FETCH_HEAD
La première commande récupère la branche
maint
dans le dĂ©pĂ´t Ăgit://git.kernel.org/pub/scm/git/git.git
et la seconde commande utiliseFETCH_HEAD
pour examiner la branche avec git-log[1]. Les objets rĂ©cupĂ©rĂ©s seront Ă©ventuellement supprimĂ©s par le service d’entretien intĂ©grĂ© de git (voir git-gc[1]).
SÉCURITÉ
Les protocoles "fetch" et "push" ne sont pas conçus pour empĂŞcher un tiers de voler des donnĂ©es de l’autre dĂ©pĂ´t qui n’Ă©taient pas destinĂ©es Ă ĂŞtre partagĂ©es. Si vous avez des donnĂ©es privĂ©es que vous devez protĂ©ger contre un tiers malveillant, la meilleure solution est de les stocker dans un autre dĂ©pĂ´t. Cela s’applique aussi bien aux clients qu’aux serveurs. En particulier, les espaces de noms sur un serveur ne sont pas efficaces pour le contrĂ´le de l’accès en lecture ; vous ne devez accorder l’accès en lecture Ă un espace de noms qu’aux clients auxquels vous feriez confiance pour l’accès en lecture Ă l’ensemble du dĂ©pĂ´t.
Les vecteurs d’attaque connus sont les suivants :
-
La victime envoie des lignes "have" annonçant les identifiants des objets qu’elle possède et qui ne sont pas explicitement destinĂ©s Ă ĂŞtre partagĂ©s, mais qui peuvent ĂŞtre utilisĂ©s pour optimiser le transfert si le pair les possède Ă©galement. L’attaquant choisit un ID d’objet X Ă voler et envoie une rĂ©fĂ©rence Ă X, mais n’est pas obligĂ© d’envoyer le contenu de X parce que la victime l’a dĂ©jĂ . La victime croit maintenant que l’attaquant a X, et elle lui renvoie le contenu de X plus tard. (Cette attaque est la plus simple Ă rĂ©aliser pour un client sur un serveur, en crĂ©ant une rĂ©fĂ©rence Ă X dans l’espace de noms auquel le client a accès et en la rĂ©cupĂ©rant ensuite. La façon la plus probable pour un serveur de l’exĂ©cuter sur un client est de "fusionner" X dans une branche publique et d’espĂ©rer que l’utilisateur fasse un travail supplĂ©mentaire sur cette branche et la repousse vers le serveur sans remarquer la fusion).
-
Comme en n°1, l’attaquant choisit un objet ID X Ă voler. La victime envoie un objet Y que l’attaquant possède dĂ©jĂ , et l’attaquant prĂ©tend faussement avoir X et non Y, de sorte que la victime envoie Y comme delta contre X. Le delta rĂ©vèle Ă l’attaquant des rĂ©gions de X qui sont similaires Ă Y.
CONFIGURATION
Warning
|
Missing See original version for this content. |
Warning
|
Missing See original version for this content. |
BOGUES
L’utilisation de --recurse-submodules ne permet actuellement d’obtenir de nouveaux commits que dans les sous-modules qui sont prĂ©sents par exemple dans $GIT_DIR/modules/
. Lorsqu’un nouveau sous-module est ajoutĂ© en amont, le sous-module lui-mĂŞme ne peut pas ĂŞtre rĂ©cupĂ©rĂ©, ce qui rend impossible de vĂ©rifier ce sous-module plus tard sans avoir Ă le rĂ©cupĂ©rer Ă nouveau. Ce problème devrait ĂŞtre corrigĂ© dans une prochaine version de Git.
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 .