Git 🌙
Français ▾ Topics ▾ Latest version ▾ git-push last updated in 2.45.0

NOM

git-push - Met à jour les références distantes ainsi que les objets associés

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 ou HEAD (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 configuration remote. <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 exemple refs/heads/master), nous essaierons de déduire où dans refs/* 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 de refs/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 de refs/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 noms refs/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] et pre-receive et update 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. Voir receive.denyDeletes dans git-config[1] et pre-receive et update 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 que refs/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 exemple git push --prune remote refs/heads/*:refs/tmp/* s’assurera que la branche distante refs/tmp/foo sera supprimĂ©e si refs/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/, et refs/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 configuration remote.<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 configuration push.followTags. Pour plus d’informations, voir push.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. Si true ou --signed, la poussĂ©e Ă©chouera si le serveur ne prend pas en charge les poussĂ©es signĂ©es. S’il est dĂ©fini sur if-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 configuration push.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 implicitement git fetch sur le distant pour ĂŞtre poussĂ© en arrière-plan, par exemple git 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 lance git 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 vers master si la version distante est toujours Ă  base, indĂ©pendamment de ce que votre remotes/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 avec push.default rĂ©glĂ© sur matching ou avec plusieurs destinations de poussĂ©e configurĂ©es avec remote.*.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 exemple git push origin +master pour forcer une poussĂ©e vers la branche master). 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 :

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 ou receive.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 (ou origin, 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 configuration push.default.

Par exemple, pour pousser par défaut uniquement la branche actelle vers origin, utilisez git config remote.origin.push HEAD. Tout <spec-de-réf> valide (comme ceux des exemples ci-dessous) peut être configuré par défaut pour git 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, trouvera refs/heads/master), et met Ă  jour la mĂŞme rĂ©f (par exemple refs/heads/master) dans le dĂ©pĂ´t origin avec elle. Si master 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 exemple refs/heads/master) pour mettre à jour la référence qui correspond à satellite/master (très probablement refs/remotes/satellite/master) dans le dépôt vaisseaumère ; faire de même pour dev et satellite/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 le vaisseaumère en utilisant git push qui est exĂ©cutĂ© dans la direction opposĂ©e afin d’intĂ©grer le travail effectuĂ© sur satellite, 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 machine satellite, vous ouvririez un ssh sur le vaisseaumère et y lanceriez git merge pour complĂ©ter l’Ă©mulation de git pull qui Ă©tait lancĂ©e sur vaisseaumère afin de tirer les modifications faites sur satellite.

git push origin HEAD:master

Pousser la branche actuelle vers la référence distante correspondant à master dans le dépôt origin. 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Ă´t origin en copiant la branche master 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ôt origin (par exemple refs/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 :

  1. 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).

  2. 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 fr/includes/cmd-config-section-all.txt

See original version for this content.

Warning

Missing fr/config/push.txt

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 .

scroll-to-top