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.45.1 → 2.47.0 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.2 → 2.42.3 no changes
- 2.42.1 11/02/23
- 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.39.1 → 2.39.5 no changes
- 2.39.0 12/12/22
- 2.38.1 → 2.38.5 no changes
- 2.38.0 10/02/22
- 2.35.1 → 2.37.7 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.30.1 → 2.31.8 no changes
- 2.30.0 12/27/20
- 2.25.1 → 2.29.3 no changes
- 2.25.0 01/13/20
- 2.23.1 → 2.24.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.18.1 → 2.19.6 no changes
- 2.18.0 06/21/18
- 2.17.0 → 2.17.6 no changes
- 2.16.6 12/06/19
- 2.15.4 12/06/19
- 2.14.6 no changes
- 2.13.7 05/22/18
- 2.12.5 09/22/17
- 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.3.10 09/28/15
- 2.2.3 09/04/15
- 2.1.4 no changes
- 2.0.5 12/17/14
SYNOPSIS
git push [--all | --branches | --mirror | --tags] [--follow-tags] [--atomic] [-n | --dry-run] [--receive-pack=<git-receive-pack>] [--repo=<dĂ©pĂ´t>] [-f | --force] [-d | --delete] [--prune] [-q | --quiet] [-v | --verbose] [-u | --set-upstream] [-o <chaĂ®ne> | --push-option=<chaĂ®ne>] [--[no-]signed|--signed=(true|false|if-asked)] [--force-with-lease[=<nom-de-rĂ©f>[:<attendu>]] [--force-if-includes]] [--no-verify] [<dĂ©pĂ´t> [<spĂ©c-de-rĂ©f>…]]
DESCRIPTION
Met Ă jour les rĂ©fĂ©rences distantes Ă l’aide des rĂ©fĂ©rences locales, tout en envoyant les objets nĂ©cessaires pour complĂ©ter les rĂ©fĂ©rences donnĂ©es.
Vous pouvez faire arriver des choses intéressantes à un dépôt chaque fois que vous poussez vers lui, en y mettant en place des « crochets ». Voir la documentation pour git-receive-pack[1].
Lorsque la ligne de commande ne spĂ©cifie pas oĂą pousser avec l’argument <dĂ©pĂ´t>
, la configuration branch. *. remote
de la branche actuelle est consultée pour déterminer où pousser. Si la configuration est manquante, elle est par défaut origin.
Lorsque la ligne de commande ne spécifie pas quoi pousser avec les arguments <spéc-de-réf>...
ou les options --all
, --mirror
ou --tags
, la commande trouve la valeur par défaut` <spéc-de-réf> ` en consultant la configuration remote. *. push
, et si elle n’est pas trouvĂ©e, honore la configuration` push.default` pour dĂ©cider quoi pousser (Voir git-config[1] pour la signification de push.default
) .
Lorsque ni la ligne de commande ni la configuration ne spécifient quoi pousser, le comportement par défaut est utilisé, ce qui correspond à la valeur simple
pour` push.default` : la branche actuelle est poussĂ©e vers la branche amont correspondante, mais par mesure de sĂ©curitĂ©, la poussĂ©e est abandonnĂ©e si la branche amont n’a pas le mĂŞme nom que la branche locale.
OPTIONS
- <dépôt>
-
Le dĂ©pĂ´t "distant" qui est la destination d’une opĂ©ration de poussĂ©e. Ce paramètre peut ĂŞtre soit une URL (voir la section URLS GIT ci-dessous) ou le nom d’un dĂ©pĂ´t distant (voir la section DISTANTS ci-dessous).
- <rĂ©f-de-spĂ©c>…
-
SpĂ©cifier quelle rĂ©fĂ©rence de destination mettre Ă jour avec quel objet source. Le format d’un paramètre <rĂ©f-de-spĂ©c> est un plus facultatif
+
, suivi de l’objet source <src>, suivi de deux points:
, suivi de la rĂ©fĂ©rence ref <dst> de destination.Le <src> est souvent le nom de la branche que vous voudriez pousser, mais il peut s’agir de n’importe quelle "expression SHA-1" arbitraire, comme
master ~ 4
ouHEAD
(voir gitrevisions[7]) .Le <dst> indique quelle référence du côté distant est mise à jour avec cette poussée. Des expressions arbitraires ne peuvent pas être utilisées ici, une référence réelle doit être nommée. Si
git push [<dépôt>]
sans aucun argument<spéc-de-réf>
est défini pour mettre à jour une référence à la destination avec<src>
avec la variable de configurationremote. <dépôt> .push
, la partie :<dst > ` peut être omise - une telle poussée mettra à jour une référence que
<src>met normalement Ă jour sans aucun
<spéc-de-réf>sur la ligne de commande. Sinon, un ` :<dst>
manquant signifie mettre à jour la même référence que le<src>
.Si <dst> ne commence pas par
refs/
(par exemplerefs/heads/master
), nous essaierons de déduire où dansrefs/*
sur le <dépôt> de destination il appartient en fonction du type de <src> poussé et si <dst> est ambigu.-
Si <dst> fait référence sans ambiguïté à une référence sur le <dépôt> distant, alors pousser sur cette référence.
-
Si <src> se résout en une réf commençant par refs/heads/ ou refs/tags/, alors préfixer ceci à <dst>.
-
D’autres rĂ©solutions d’ambiguĂŻtĂ© pourraient ĂŞtre ajoutĂ©es dans le futur, mais pour l’instant, tout autre cas se soldera par une erreur indiquant ce que nous avons essayĂ©, et en fonction de la configuration
advice.pushUnqualifiedRefname
(voir git-config[1]) suggérer vers quel espace de nom refs/ vous avez pu vouloir pousser.
L’objet rĂ©fĂ©rencĂ© par <src> est utilisĂ© pour mettre Ă jour la rĂ©fĂ©rence <dst> du cĂ´tĂ© distant. Le fait que cela soit autorisĂ© dĂ©pend de l’endroit oĂą vit la rĂ©fĂ©rence <dst> dans
refs/*
comme dĂ©crit en dĂ©tail ci-dessous. Dans ces sections, "mise Ă jour" signifie tout type de modification sauf les suppressions, qui, comme indiquĂ© après les quelques sections suivantes, sont traitĂ©s diffĂ©remment.L’espace de noms
refs/heads/*
n’acceptera que les objets commit, et les mises Ă jour uniquement si elles peuvent ĂŞtre en avance rapide.L’espace de noms
refs/tags/*
acceptera tout type d’objet (car les commits, les arbres et les blobs peuvent ĂŞtre Ă©tiquetĂ©s), et toute mise Ă jour de ceux-ci sera rejetĂ©e.Il est possible de pousser n’importe quel type d’objet vers n’importe quel espace de noms en dehors de
refs/{tags,heads}/*
. Dans le cas des tags et des commit, ceux-ci seront traitĂ©s comme s’ils Ă©taient des commits Ă l’intĂ©rieur derefs/heads/*
afin de dĂ©terminer si la mise Ă jour est autorisĂ©e.C’est-Ă -dire qu’une avance rapide des commits et des Ă©tiquettes en dehors de
refs/{tags,heads}/*
est autorisĂ©e, mĂŞme dans les cas oĂą ce qui est avancĂ© rapidement n’est pas un commit, mais un objet Ă©tiquette qui pointe vers un nouveau commit qui est une avance rapide de la dernière Ă©tiquette (ou commit) qu’il remplace. Le remplacement d’une Ă©tiquette par une Ă©tiquette entièrement diffĂ©rente est Ă©galement autorisĂ©, si elle pointe vers le mĂŞme commit, ainsi que le fait de pousser une Ă©tiquette pelĂ©e, c’est-Ă -dire de pousser le commit vers lequel l’objet Ă©tiquette existant pointe, ou un nouvel objet Ă©tiquette vers lequel un commit existant pointe.Les objets d’arbre et de blob Ă l’extĂ©rieur de
refs/{tags,heads}/*
seront traitĂ©s de la mĂŞme manière que s’ils Ă©taient Ă l’intĂ©rieur derefs/tags/*
, toute mise Ă jour de ceux-ci sera rejetĂ©e.Toutes les règles dĂ©crites ci-dessus sur ce qui n’est pas autorisĂ© en tant que mise Ă jour peuvent ĂŞtre passĂ©es outre en ajoutant le caractère facultatif
+
Ă une spĂ©c-de-rĂ©f (ou en utilisant l’option de ligne de commande--force
). La seule exception Ă cela est qu’aucune quantitĂ© de forçage ne fera que l’espace de nomsrefs/heads/*
acceptera un objet non-commit. Les crochets et la configuration peuvent également remplacer ou modifier ces règles, voir par ex.receive.denyNonFastForwards
dans git-config[1] etpre-receive
etupdate
dans githooks[5].Pousser un <src> vide vous permet de supprimer la référence <dst> du dépôt distant. Les suppressions sont toujours acceptées sans signe
+
dans la spéc-de-réf (ou--force
), sauf lorsque la configuration ou les crochets l’interdisent. Voirreceive.denyDeletes
dans git-config[1] etpre-receive
etupdate
dans githooks[5].La spéc-de-réf spéciale
:
(ou+:
pour permettre des mises à jour pas en avance rapide) ordonne à Git de pousser les branches "correspondantes" : pour chaque branche qui existe du côté local, le côté distant est mis à jour si une branche du même nom existe déjà du côté distant.tag <étiquette>
signifie la mĂŞme chose querefs/tags/<Ă©tiquette>:refs/tags/<Ă©tiquette>
. -
- --all
- --branches
-
Pousser toutes les branches (c’est-Ă -dire les rĂ©fĂ©rences sous
refs/heads/
) ; ne peut pas ĂŞtre utilisĂ© avec d’autres <spĂ©c-de-rĂ©f>. - --prune
-
Supprimer les branches distantes qui n’ont pas d’Ă©quivalent local. Par exemple, une branche distante
tmp
sera supprimĂ©e si une branche locale du mĂŞme nom n’existe plus. Cela respecte Ă©galement les spĂ©cificateurs de rĂ©fĂ©rence, par exemplegit push --prune remote refs/heads/*:refs/tmp/*
s’assurera que la branche distanterefs/tmp/foo
sera supprimée sirefs/heads/foo
n’existe plus. - --mirror
-
Au lieu de nommer chaque réf à pousser, spécifier que toutes les réfs sous
refs/
(ce qui inclut mais n’est pas limitĂ© Ărefs/heads/
,refs/remotes/
, etrefs/tags/
) soient reflĂ©tĂ©es dans le dĂ©pĂ´t distant. Les rĂ©fs locales nouvellement crĂ©Ă©es seront poussĂ©es vers l’autre extrĂ©mitĂ©, les rĂ©fs mises Ă jour localement seront mises Ă jour de force sur l’extrĂ©mitĂ© distante, et les rĂ©fs supprimĂ©es seront supprimĂ©es de l’extrĂ©mitĂ© distante. C’est la valeur par dĂ©faut si l’option de configurationremote.<distant>.mirror
est définie. - -n
- --dry-run
-
Fait tout sauf envoyer les mises Ă jour.
- --porcelain
-
Produire une sortie lisible par machine. La ligne d’Ă©tat de sortie pour chaque rĂ©fĂ©rence sera sĂ©parĂ©e par des tabulations et envoyĂ©e Ă stdout au lieu de stderr. Les noms symboliques complets des rĂ©fs seront donnĂ©s.
- -d
- --delete
-
Toutes les références listées sont supprimées du dépôt distant. Cela revient à préfixer toutes les références par deux points.
- --tags
-
Toutes les références sous
refs/tags
sont poussées, en plus des spéc-de-réfs explicitement listés sur la ligne de commande. - --follow-tags
-
Pousser tous les réfs qui seraient poussées sans cette option, et pousser aussi les étiquettes annotées dans
refs/tags
qui sont manquantes du distant mais qui pointent vers le commit-esque qui sont accessibles depuis les réfs poussées. Cela peut également être spécifié avec la variable de configurationpush.followTags
. Pour plus d’informations, voirpush.followTags
dans git-config[1]. - --[no-]signed
- --signed=(true|false|if-asked)
-
Signer avec GPG la demande de poussĂ©e pour mettre Ă jour les rĂ©fĂ©rences du cĂ´tĂ© rĂ©ception, pour lui permettre d’ĂŞtre vĂ©rifiĂ© par les crochets et/ou d’ĂŞtre enregistrĂ©e. Si
false
ou--no-signed
, aucune signature ne sera tentée. Sitrue
ou--signed
, la poussĂ©e Ă©chouera si le serveur ne prend pas en charge les poussĂ©es signĂ©es. S’il est dĂ©fini surif-asked
, signer si et seulement si le serveur prend en charge les poussĂ©es signĂ©es. La poussĂ©e Ă©chouera Ă©galement si l’appel rĂ©el Ăgpg --sign
Ă©choue. Voir git-receive-pack[1] pour les dĂ©tails sur l’extrĂ©mitĂ© rĂ©ceptrice. - --[no-]atomic
-
Utiliser une transaction atomique Ă distance, si possible. Soit toutes les rĂ©fĂ©rences sont mises Ă jour, soit, en cas d’erreur, aucune rĂ©fĂ©rence n’est mise Ă jour. Si le serveur ne prend pas en charge les poussĂ©es atomiques, la poussĂ©e Ă©chouera.
- -o <option>
- --push-option=<option>
-
Transmettre la chaĂ®ne donnĂ©e au serveur, qui les transmet au crochet pre-receive ainsi qu’au crochet post-receive. La chaĂ®ne donnĂ©e ne doit pas contenir de caractère NUL ou LF. Lorsque plusieurs
--push-option=<option>
sont donnĂ©s, ils sont tous envoyĂ©s de l’autre cĂ´tĂ© dans l’ordre indiquĂ© sur la ligne de commande. Lorsqu’aucun--push-option=<option>
n’est donnĂ© en ligne de commande, les valeurs de la variable de configurationpush.pushOption
sont utilisées à la place. - --receive-pack=<git-receive-pack>
- --exec=<git-receive-pack>
-
Chemin d’accès au programme git-receive-pack sur l’extrĂ©mitĂ© distante. Parfois utile lorsque vous poussez vers un dĂ©pĂ´t distant via ssh, et que vous n’avez pas le programme dans un rĂ©pertoire sur le $PATH par dĂ©faut.
- --[no-]force-with-lease
- --force-with-lease=<nom-de-réf>
- --force-with-lease=<nom-de-réf>:<attendu>
-
Habituellement, "git push" refuse de mettre Ă jour une rĂ©fĂ©rence distante qui n’est pas un ancĂŞtre de la rĂ©fĂ©rence locale utilisĂ©e pour la remplacer.
Cette option passe outre cette restriction si la valeur actuelle de la référence distante est la valeur attendue. "git push" échoue sinon.
Imaginez que vous devez rebaser ce que vous avez dĂ©jĂ publiĂ©. Vous devrez contourner la règle "doit avancer rapidement" afin de remplacer l’historique que vous avez initialement publiĂ© par l’historique rebasĂ©. Si quelqu’un d’autre a construit sur votre historique d’origine pendant que vous rebasez, le sommet de la branche distante peut avoir avancĂ© avec son commit, et pousser aveuglĂ©ment avec
--force
Ă©liminera son travail.Cette option vous permet de dire que vous vous attendez Ă ce que l’historique que vous mettez Ă jour est ce que vous avez rebasĂ© et que vous souhaitez remplacer. Si la rĂ©fĂ©rence distante pointe toujours sur le commit que vous avez spĂ©cifiĂ©, vous pouvez ĂŞtre sĂ»r qu’aucune autre personne n’a fait quoi que ce soit Ă la rĂ©fĂ©rence. C’est comme prendre un "contrat" sur la rĂ©fĂ©rence sans la verrouiller explicitement, et la rĂ©fĂ©rence distante n’est mise Ă jour que si le "contrat" est toujours valide.
Seul
--force-with-lease
, sans préciser les détails, protégera toutes les références distantes qui vont être mises à jour en exigeant leur valeur actuelle à être la même que la branche de suivi à distance que nous avons pour eux.--force-with-lease=<nom-de-réf>
, sans spécifier la valeur attendue, protégera (seulement) la référence nommée, si elle va être mise à jour, en exigeant que sa valeur actuelle soit la même que la branche de suivi à distance que nous avons pour elle.--force-with-lease=<nom-de-réf>:<attendu>
protégera (seulement) la référence nommée, si elle va être mise à jour, en exigeant que sa valeur actuelle soit la même que la valeur spécifiée<attendu > `(qui peut être différente de la branche de suivi à distance que nous avons pour le nom de référence, ou si nous n'avons même pas besoin d'avoir une telle branche de suivi à distance lorsque cette forme est utilisée). Si `<attendu>
est la chaîne vide, alors la référence nommée ne doit pas déjà exister.Notez que toutes les formes autres que
--force-with-lease=<nom-de-réf>:<attendu>
qui spĂ©cifie explicitement la valeur actuelle attendue de la rĂ©fĂ©rence sont toujours expĂ©rimentales et leur sĂ©mantique peut changer Ă mesure que nous acquĂ©rons de l’expĂ©rience avec cette fonctionnalitĂ©."--no-force-with-lease" annulera tous les prĂ©cĂ©dents --force-with-lease sur la ligne de commande.
Une note gĂ©nĂ©rale sur la sĂ©curitĂ©Â : fournir cette option sans valeur attendue, c’est-Ă -dire que
--force-with-lease
ou--force-with-lease=<nom-de-réf>
interagit très mal avec tout ce qui exécute implicitementgit fetch
sur le distant pour être poussé en arrière-plan, par exemplegit fetch origin
sur votre dĂ©pĂ´t dans un job cron.La protection qu’il offre par rapport Ă
--force
est d’assurer que les modifications ultĂ©rieures sur lesquelles votre travail n’Ă©tait pas basĂ© ne sont pas supprimĂ©es, mais elle est trivialement rĂ©duite Ă nĂ©ant si un processus de mise Ă jour des rĂ©fĂ©rences est effectuĂ© en arrière-plan. Nous n’avons rien d’autre que les informations de suivi Ă distance Ă utiliser comme heuristique pour les rĂ©fĂ©rences que vous ĂŞtes censĂ© avoir vues et que vous ĂŞtes prĂŞt Ă supprimer.Si votre Ă©diteur ou un autre système exĂ©cute
git fetch
en arrière-plan pour vous, un moyen d’attĂ©nuer cela est simplement de configurer un autre distant :git remote add origin-push $(git config remote.origin.url) git fetch origin-push
Maintenant, lorsque le processus d’arrière-plan exĂ©cute
git fetch origin
, les références sur` origin-push` ne seront pas mises à jour, et donc des commandes comme :git push --force-with-lease origin-push
Échouera à moins que vous ne lanciez manuellement
git fetch origin-push
. Cette méthode est bien sûr entièrement contrecarrée par quelque chose qui lancegit fetch --all
, auquel cas vous devrez soit la désactiver soit faire quelque chose de plus fastidieux comme :git fetch # mettre à jour 'master' depuis le distant git tag base master # étiqueter notre point de base git rebase -i master # réécrire quelques commits git push --force-with-lease=master:base master:master
C’est-Ă -dire crĂ©er une Ă©tiquette
base
pour les versions du code amont que vous avez vues et que vous ĂŞtes prĂŞt Ă Ă©craser, puis rĂ©Ă©crire l’historique, et enfin forcer la poussĂ©e des modification versmaster
si la version distante est toujours Ăbase
, indépendamment de ce que votreremotes/origin/master
local a été mis à jour en arrière-plan.Alternativement, spécifier
--force-if-includes
comme une option auxiliaire avec--force-with-lease[=<nom-de-réf>]
(c’est-Ă -dire sans dire vers quel commit exact la rĂ©f du cĂ´tĂ© distant doit pointer, ou quelles rĂ©fs du cĂ´tĂ© distant sont protĂ©gĂ©es) au moment de "push" vĂ©rifiera si les mises Ă jour des rĂ©fs du cĂ´tĂ© distant qui peuvent avoir Ă©tĂ© implicitement mises Ă jour en arrière-plan sont intĂ©grĂ©es localement avant d’autoriser une mise Ă jour forcĂ©e. - -f
- --force
-
Habituellement, la commande refuse de mettre Ă jour une rĂ©fĂ©rence distante qui n’est pas un ancĂŞtre de la rĂ©fĂ©rence locale utilisĂ©e pour la remplacer. De plus, lorsque l’option
--force-with-lease
est utilisée, la commande refuse de mettre à jour une référence distante dont la valeur actuelle ne correspond pas à ce qui est attendu.Ce drapeau désactive ces contrôles et peut entraîner la perte de commits du dépôt distant ; utilisez-le avec précaution.
Notez que
--force
s’applique Ă toutes les refs qui sont poussĂ©es, donc l’utiliser avecpush.default
réglé surmatching
ou avec plusieurs destinations de poussée configurées avecremote.*.push
peut écraser les refs autres que la branche courante (y compris les refs locales qui sont strictement derrière leur homologue distante). Pour forcer un push vers une seule branche, utilisez un " + " devant le spécificateur de référence à pousser (par exemplegit push origin +master
pour forcer une poussée vers la branchemaster
). Voir la section<spéc-de -réf>...
ci-dessus pour plus de détails. - --[no-]force-if-includes
-
Ne forcer une mise à jour que si le sommet de la référence de suivi à distance a été intégré localement.
Cette option permet de vĂ©rifier si le sommet de la rĂ©fĂ©rence de suivi Ă distance est accessible depuis l’une des entrĂ©es "reflog" de la branche locale qui est basĂ©e dessus pour une rĂ©Ă©criture. Cette vĂ©rification permet de s’assurer que toutes les mises Ă jour du distant ont Ă©tĂ© incorporĂ©es localement en rejetant la mise Ă jour forcĂ©e si ce n’est pas le cas.
Si l’option est passĂ©e sans spĂ©cifier
--force-with-lease
, ou spécifiée avec--force-with-lease=<nom-de-réf>:<attendu>
, c’est un "no-op".SpĂ©cifier
--no-force-if-includes
désactive ce comportement. - --repo=<dépôt>
-
Cette option est Ă©quivalente Ă l’argument <dĂ©pĂ´t>. Si les deux sont spĂ©cifiĂ©s, l’argument de la ligne de commande a la prioritĂ©.
- -u
- --set-upstream
-
Pour chaque branche qui est Ă jour ou poussĂ©e avec succès, ajoutet une 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
dans git-config[1]. - --[no-]thin
-
Ces options sont passĂ©es Ă git-send-pack[1]. Un transfert fin rĂ©duit considĂ©rablement la quantitĂ© de donnĂ©es envoyĂ©es lorsque l’expĂ©diteur et le destinataire ont de nombreux objets identiques en commun. La valeur par dĂ©faut est
--thin
. - -q
- --quiet
-
Supprimer toutes les sorties, y compris la liste des rĂ©fĂ©rences mises Ă jour, Ă moins qu’une erreur ne se produise. Les progrès ne sont pas signalĂ©s 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.
- --no-recurse-submodules
- --recurse-submodules=check|on-demand|only|no
-
Peut ĂŞtre utilisĂ© pour s’assurer que tous les commits de sous-module utilisĂ©s par les rĂ©visions Ă pousser sont disponibles sur une branche de suivi Ă distance. Si check est utilisĂ©, Git vĂ©rifiera que tous les commits de sous-module qui ont changĂ© dans les rĂ©visions Ă pousser sont disponibles sur au moins une branche distante du sous-module. S’il manque des validations, la poussĂ©e sera interrompue et sortira avec un statut non nul. Si on-demand est utilisĂ©, tous les sous-module qui ont Ă©tĂ© modifiĂ©s dans les rĂ©visions Ă pousser seront poussĂ©s. Si on-demand n’a pas pu pousser toutes les rĂ©visions nĂ©cessaires, il sera Ă©galement interrompu et sortira avec un statut non nul. Si only est utilisĂ©, tous les sous-modules seront poussĂ©s alors que le superprojet est laissĂ© sans poussĂ©e. La valeur no ou l’utilisation de
--no-recurse-submodules
peut ĂŞtre utilisĂ©e pour remplacer la variable de configuration push.recurseSubmodules lorsqu’aucune rĂ©cursion de sous-module n’est nĂ©cessaire.Lors de l’utilisation de on-demand ou only, si un sous-module possède une configuration "push.recurseSubmodules={on-demand,only}" ou "submodule.recurse", une rĂ©cursion supplĂ©mentaire se produira. Dans ce cas, "only" est traitĂ© comme "on-demand".
- --[no-]verify
-
Basculer le crochet de prĂ©-poussĂ©e pre-push (voir githooks[5]). La valeur par dĂ©faut est --verify, ce qui donne au crochet une chance d’empĂŞcher la poussĂ©e. Avec --no-verify, le crochet est complètement contournĂ©.
- -4
- --ipv4
-
Utiliser uniquement les adresses IPv4, en ignorant les adresses IPv6.
- -6
- --ipv6
-
Utiliser uniquement les adresses IPv6, en ignorant les adresses IPv4.
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>
SORTIE
La sortie de "git push" dépend de la méthode de transport utilisée ; cette section décrit la sortie lors du passage par protocole Git (soit localement soit via ssh).
L’Ă©tat de la poussĂ©e 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>)
Si --porcelain est utilisé, alors chaque ligne de la sortie est de la forme :
<drapeau> \t <de>:<à > \t <résumé> (<raison>)
L’Ă©tat des rĂ©fĂ©rences Ă jour n’est indiquĂ© que si l’option --porcelaine ou --verbose est utilisĂ©e.
- drapeau
-
Un seul caractère indiquant le statut de la référence :
- (espace)
-
pour une poussée en avance rapide réussie ;
-
+
-
pour une mise à jour forcée avec succès ;
-
-
-
pour une réf. supprimée avec succès ;
-
*
-
pour une nouvelle référence poussée avec succès ;
-
!
-
pour une rĂ©fĂ©rence qui a Ă©tĂ© rejetĂ©e ou qui n’a pas rĂ©ussi Ă ĂŞtre poussĂ©e ; et
-
=
-
pour une rĂ©fĂ©rence qui Ă©tait Ă jour et n’avait pas besoin d’ĂŞtre poussĂ©e.
- résumé
-
Pour une réf poussé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).En cas d’Ă©chec de la mise Ă jour, de plus amples dĂ©tails sont donnĂ©s :
- rejeté
-
Git n’a pas du tout essayĂ© d’envoyer la rĂ©fĂ©rence, gĂ©nĂ©ralement parce que ce n’est pas une avance rapide et que vous n’avez pas forcĂ© la mise Ă jour.
- le distant a rejeté
-
Le serveur distant a refusĂ© la mise Ă jour. GĂ©nĂ©ralement causĂ© par un crochet du cĂ´tĂ© distant, ou parce que le dĂ©pĂ´t distant a l’une des options de sĂ©curitĂ© suivantes en vigueur :
receive.denyCurrentBranch
(pour les poussées vers la branche extraite),receive.denyNonFastForwards
(pour les mises à jour forcées mais pas en avance rapide),receive.denyDeletes
oureceive.denyDeleteCurrent
. Voir git-config[1]. - Ă©chec distant
-
Le serveur distant n’a pas signalĂ© la mise Ă jour rĂ©ussie de la rĂ©fĂ©rence, peut-ĂŞtre en raison d’une erreur temporaire du cĂ´tĂ© distant, d’une rupture de la connexion rĂ©seau ou d’une autre erreur transitoire.
- de
-
Le nom de la référence locale qui est poussée, moins son préfixe
refs/<type>/
. En cas de suppression, le nom de la rĂ©fĂ©rence locale est omis. - Ă
-
Le nom de la référence distante 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Ă© poussĂ©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.
NOTE SUR LES AVANCES RAPIDES
Lorsqu’une mise Ă jour modifie une branche (ou plus gĂ©nĂ©ralement, une rĂ©f) qui pointait auparavant vers le commit A pour pointer vers un autre commit B, on parle de mise Ă jour en avance rapide si et seulement si B est un descendant de A.
Dans une mise Ă jour rapide de A Ă B, l’ensemble des commits sur lesquels le commit original A s’appuyait est un sous-ensemble des commits sur lesquels le nouveau commit B s’appuie. Ainsi, il ne perd pas d’historique.
En revanche, une mise Ă jour pas en avance rapide fera perdre de l’historique. Par exemple, supposons que vous et quelqu’un d’autre ayez commencĂ© au mĂŞme commit X, et que vous ayez construit un historique menant au commit B alors que l’autre personne a construit un historique menant au commit A. L’historique ressemble Ă ceci :
B / ---X---A
Supposons en outre que l’autre personne ait dĂ©jĂ poussĂ© les modifications menant Ă A vers le dĂ©pĂ´t original dont vous avez tous deux obtenu le commit X original.
La poussĂ©e effectuĂ©e par l’autre personne a mis Ă jour la branche qui pointait sur le commit X pour pointer sur le commit A. Il s’agit d’une avance rapide.
Mais si vous essayez de pousser, vous essaierez de mettre Ă jour la branche (qui pointe maintenant vers A) avec le commit B. Cela ne fait pas d’avance rapide. Si vous le faites, les modifications introduits par le commit A seront perdues, car tout le monde va maintenant commencer Ă construire sur B.
La commande par dĂ©faut ne permet pas une mise Ă jour qui ne soit pas une avance rapide pour Ă©viter une telle perte d’historique.
Si vous ne voulez pas perdre votre travail (historique de X Ă B) ou le travail de l’autre personne (historique de X Ă A), vous devez d’abord rĂ©cupĂ©rer l’historique du dĂ©pĂ´t, crĂ©er un historique qui contient les modifications effectuĂ©es par les deux parties et repousser le rĂ©sultat.
Vous pouvez effectuer un "git pull", résoudre les conflits potentiels et "git push" le résultat. Un "git pull" créera un commit de fusion C entre les commit A et B.
B---C / / ---X---A
La mise à jour de A avec le commit de fusion résultant sera une avance rapide et votre poussée sera acceptée.
Vous pouvez également rebaser votre modification entre X et B sur A, avec "git pull --rebase", et pousser le résultat. Le rebasage créera un nouveau commit D qui construit la modification entre X et B sur A.
B D / / ---X---A
Là encore, la mise à jour de A avec ce commit sera en avance rapide et votre poussée sera acceptée.
Il existe une autre situation courante dans laquelle vous pouvez rencontrer un rejet du fait d’absence d’avance rapide lorsque vous essayez de pousser, et c’est possible mĂŞme lorsque vous poussez dans un dĂ©pĂ´t dans lequel personne d’autre ne pousse. Après avoir vous-mĂŞme poussĂ© le commit A (dans la première image de cette section), remplacez-le par "git commit --amend" pour produire le commit B, et vous essayez de le pousser, parce que vous avez oubliĂ© que vous avez dĂ©jĂ poussĂ© A. Dans un tel cas, et seulement si vous ĂŞtes certain que personne n’a rĂ©cupĂ©rĂ© votre commit A prĂ©cĂ©dent (et a commencĂ© Ă construire dessus), vous pouvez lancer "git push --force" pour l’Ă©craser. En d’autres termes, "git push --force" est une mĂ©thode rĂ©servĂ©e aux cas oĂą vous voulez vraiment perdre l’historique.
EXEMPLES
-
git push
-
Fonctionne comme
git push <distant>
, oĂą <distant> est le distant de la branche actuelle (ouorigin
, si aucun distant n’est configurĂ© pour la branche actuelle). -
git push origin
-
Sans configuration supplĂ©mentaire, pousse la branche en cours vers l’amont configurĂ© (variable de configuration
branch.<nom>.merge
) si elle a le mĂŞme nom que la branche actuelle et gĂ©nère des erreurs sans pousser autrement.Le comportement par dĂ©faut de cette commande quand aucun <spec-de-rĂ©f> n’est donnĂ© peut ĂŞtre configurĂ© en dĂ©finissant l’option
push
du distant, ou la variable de configurationpush.default
.Par exemple, pour pousser par défaut uniquement la branche actelle vers
origin
, utilisezgit config remote.origin.push HEAD
. Tout <spec-de-réf> valide (comme ceux des exemples ci-dessous) peut être configuré par défaut pourgit push origin
. -
git push origin :
-
Pousse les branches "correspondantes" sur `originè. Voir <spec-de-réf> dans la section OPTIONS ci-dessus pour une description des branches "correspondantes".
-
git push origin master
-
Trouve une rĂ©f qui correspond Ă
master
dans le dépôt source (le plus souvent, trouverarefs/heads/master
), et met à jour la même réf (par exemplerefs/heads/master
) dans le dépôtorigin
avec elle. Simaster
n’existait pas Ă distance, elle serait crĂ©Ă©e. -
git push origin HEAD
-
Un moyen pratique de pousser la branche actuelle vers le mĂŞme nom sur le distant.
-
git push vaisseaumère master:satellite/master dev:satellite/dev
-
Utiliser la rĂ©fĂ©rence source qui correspond Ă
master
(par exemplerefs/heads/master
) pour mettre Ă jour la rĂ©fĂ©rence qui correspond Ăsatellite/master
(très probablementrefs/remotes/satellite/master
) dans le dépôtvaisseaumère
 ; faire de même pourdev
etsatellite/dev
.Voir la section décrivant
<spéc-de-réf>...
ci-dessus pour une discussion sur la sĂ©mantique de correspondance.Il s’agit d’Ă©muler
git fetch
exécuté sur levaisseaumère
en utilisantgit push
qui est exĂ©cutĂ© dans la direction opposĂ©e afin d’intĂ©grer le travail effectuĂ© sursatellite
, et est souvent nĂ©cessaire lorsque vous ne pouvez Ă©tablir la connexion que dans un seul sens (c’est-Ă -dire que le satellite peut ssh dans vaisseaumère mais que le vaisseaumère ne peut pas Ă©tablir de connexion avec satellite parce que ce dernier se trouve derrière un pare-feu ou n’exĂ©cute pas sshd).Après avoir lancĂ© ce
git push
sur la machinesatellite
, vous ouvririez un ssh sur levaisseaumère
et y lanceriezgit merge
pour complĂ©ter l’Ă©mulation degit pull
qui était lancée survaisseaumère
afin de tirer les modifications faites sursatellite
. -
git push origin HEAD:master
-
Pousser la branche actuelle vers la rĂ©fĂ©rence distante correspondant Ă
master
dans le dépôtorigin
. Cette forme est pratique pour pousser la branche actuelle sans avoir Ă penser Ă son nom local. -
git push origin master:refs/heads/experimental
-
Créer la branche
experimental
dans le dépôtorigin
en copiant la branchemaster
actuelle. Cette forme n’est nĂ©cessaire que pour crĂ©er une nouvelle branche ou Ă©tiquette dans le dĂ©pĂ´t distant lorsque le nom local et le nom distant sont diffĂ©rents ; sinon, le nom de la rĂ©f seul fonctionnera. -
git push origin :experimental
-
Trouver une ref qui correspond Ă
experimental
dans le dépôtorigin
(par exemplerefs/heads/experimental
), et la supprimer. -
git push origin +dev:master
-
Mettre Ă jour la branche master du dĂ©pĂ´t origin avec la branche dev, ce qui permet des mises Ă jour en mode non avance rapide. Ceci peut laisser des commits non rĂ©fĂ©rencĂ©s dans le dĂ©pĂ´t origin. ConsidĂ©rez la situation suivante, oĂą une avance rapide n’est pas possible :
o---o---o---A---B origin/master \ X---Y---Z dev
La commande ci-dessus changerait le dépôt origin en
A---B (branche sans nom) / o---o---o---X---Y---Z master
Les commits A et B n’appartiendraient plus Ă une branche portant un nom symbolique, et seraient donc injoignables. Dans cet Ă©tat, ces commits seraient supprimĂ©s par une commande
git gc
sur le dépôt origin.
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. |
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 .