Comportement par défaut de «git push» sans twig spécifiée

J’utilise la commande suivante pour accéder à ma twig distante:

git push origin sandbox 

Si je dis

 git push origin 

cela pousse-t-il aussi les changements dans mes autres twigs ou met-il seulement à jour ma twig actuelle? J’ai trois twigs: master , production et sandbox .

La documentation de git push n’est pas très claire à ce sujet, alors je voudrais clarifier ceci.

Quelles sont les twigs et les télécommandes que les commandes git push suivantes mettent à jour exactement?

 git push git push origin 

origin ci-dessus est une télécommande.

Je comprends que git push [remote] [branch] ne poussera que cette twig vers la télécommande.

Vous pouvez contrôler le comportement par défaut en définissant push.default dans votre configuration git. De la documentation git-config (1) :

 push.default 

Définit l’action que git push doit prendre si aucun refspec n’est donné sur la ligne de commande, aucun refspec n’est configuré dans la télécommande, et aucune des options données sur la ligne de commande n’implique de refspec. Les valeurs possibles sont:

  • nothing : ne poussez rien

  • matching : pousser toutes les twigs correspondantes

    Toutes les twigs ayant le même nom aux deux extrémités sont considérées comme correspondant.

    C’est la valeur par défaut dans Git 1.x.

  • upstream : pousse la twig courante vers sa twig amont (le tracking est un synonyme obsolète pour l’amont)

  • current : pousse la twig actuelle vers une twig du même nom

  • simple : (nouveau dans Git 1.7.11) comme en amont, mais refuse de pousser si le nom de la twig en amont est différent du nom local

    C’est l’option la plus sûre et convient bien aux débutants.

    Cela deviendra la valeur par défaut dans Git 2.0.

Les modes simples, actuels et en amont sont pour ceux qui veulent sortir une seule twig après avoir fini le travail, même lorsque les autres twigs ne sont pas encore prêtes à être expulsées

Exemples de ligne de commande:

Pour afficher la configuration actuelle:

 git config --global push.default 

Pour définir une nouvelle configuration:

 git config --global push.default current 

git push origin va pousser toutes les modifications sur les twigs locales qui ont des twigs distantes correspondantes à l’ origin Comme pour git push

Fonctionne comme git push , où est la télécommande actuelle (ou l’origine, si aucune télécommande n’est configurée pour la twig en cours).

De la section Exemples de la page de manuel git-push

Vous pouvez configurer un comportement par défaut pour votre git avec push.default

 git config push.default current 

ou si vous avez beaucoup de repositorys et que vous voulez la même chose pour tous, alors

 git config --global push.default current 

Le courant dans cette configuration signifie que, par défaut, vous ne poussez que la twig en cours lorsque vous lancez git

Les autres options sont les suivantes:

  • rien: ne poussez rien
  • correspondant: appuyez sur toutes les twigs correspondantes (par défaut)
  • tracking: Poussez la twig en cours vers ce qu’elle suit
  • current: Poussez la twig actuelle

MISE À JOUR – NOUVELLE FAÇON DE FAIRE CE

A partir de Git 1.7.11, procédez comme suit:

 git config --global push.default simple 

Ceci est un nouveau paramètre introduit qui fonctionne de la même manière que le courant et qui sera défini par défaut sur la version 2.0 en fonction des rumeurs.

Je viens de mettre mon code dans une twig et l’ai poussé à github, comme ceci:

 git branch SimonLowMemoryExperiments git checkout SimonLowMemoryExperiments git add . git commit -a -m "Lots of experimentation with identifying the memory problems" git push origin SimonLowMemoryExperiments 

Voici une information très pratique et utile à propos de Git Push : Git Push: Just the Tip

L’utilisation la plus courante de git push consiste à transférer vos modifications locales vers votre référentiel public en amont. En supposant que l’amont est une télécommande nommée “origin” (le nom distant par défaut si votre référentiel est un clone) et que la twig à mettre à jour vers / de s’appelle “master” (le nom de twig par défaut), cela se fait avec: git push origin master

git push origin va pousser les modifications de toutes les twigs locales vers les twigs correspondantes à l’origine distante.

git push origin master transmettra les modifications de la twig maître locale à la twig principale distante.

git push origin master:staging mettra les modifications de la twig maître locale à la twig de transfert intermédiaire si elle existe.

(Mars 2012)
Attention: cette politique de ” matching ” par défaut pourrait bientôt changer
(parfois après git1.7.10 +) :

Voir ” S’il vous plaît discuter: qu’est-ce que” git push “devrait faire lorsque vous ne dites pas quoi pousser? ”

Dans le paramètre actuel (par exemple, push.default=matching ), git push sans argument poussera toutes les twigs qui existent localement et à distance avec le même nom .
Ceci est généralement approprié lorsqu’un développeur accède à son propre référentiel public, mais peut être source de confusion, voire dangereux, lors de l’utilisation d’un référentiel partagé.

La proposition est de changer la valeur par défaut en « upstream » , c’est-à-dire de ne pousser que la twig actuelle et de la pousser vers la twig à partir de laquelle
Un autre candidat est « current »; Cela ne pousse que la twig en cours à la twig distante du même nom.

Ce qui a été discuté jusqu’ici peut être vu dans ce fil:

http://thread.gmane.org/gmane.comp.version-control.git/192547/focus=192694

Les discussions pertinentes précédentes incluent:

Pour participer à la discussion, envoyez vos messages à: [email protected]

Je viens de mettre ceci dans ma section d’alias .gitconfig et j’adore son fonctionnement:

 pub = "!f() { git push -u ${1:-origin} `git symbolic-ref HEAD`; }; f" 

Va pousser l’origine de la twig actuelle avec git pub ou un autre repo avec git pub repo-name . Délicieux.

Un push git va essayer de pousser toutes les twigs locales sur le serveur distant, c’est probablement ce que vous ne voulez pas. J’ai quelques configurations d’installation pour traiter ceci:

Alias ​​”gpull” et “gpush” de manière appropriée:

Dans mon ~ / .bash_profile

 get_git_branch() { echo `git branch 2> /dev/null | sed -e '/^[^*]/d' -e 's/* \(.*\)/\1/'` } alias gpull='git pull origin `get_git_branch`' alias gpush='git push origin `get_git_branch`' 

Ainsi, exécuter “gpush” ou “gpull” ne fera que pousser ma twig “actuellement active”.

Vous pouvez pousser la twig actuelle avec la commande

 git push origin HEAD 

(pris d’ ici )

Vous pouvez modifier ce comportement par défaut dans votre .gitconfig , par exemple:

 [push] default = current 

Pour vérifier les parameters actuels, exécutez:

 git config --global --get push.default 

Plutôt que d’utiliser des alias, je préfère créer des scripts git-XXX pour pouvoir les contrôler plus facilement (nos développeurs ont tous un certain répertoire contrôlé par la source sur ce chemin).

Ce script (appelé git-setpush ) définira la valeur de configuration de remote.origin.push sur quelque chose qui ne fera que pousser la twig en cours:

 #!/bin/bash -eu CURRENT_BRANCH=$(git branch | grep '^\*' | cut -d" " -f2) NEW_PUSH_REF=HEAD:refs/for/$CURRENT_BRANCH echo "setting remote.origin.push to $NEW_PUSH_REF" git config remote.origin.push $NEW_PUSH_REF 

Notez que, comme nous utilisons Gerrit , la cible est refs/for/XXX sur refs/for/XXX pour passer dans une twig de révision. Cela suppose également que l’origine est votre nom distant.

Invoquez-le après avoir vérifié une twig avec

 git checkout your-branch git setpush 

Il pourrait évidemment être adapté pour faire la caisse, mais j’aime les scripts pour faire une chose et le faire bien

J’ai ajouté les fonctions suivantes dans mon fichier .bashrc pour automatiser ces tâches. Git push / git pull + nom de la twig actuelle.

 function gpush() { if [[ "x$1" == "xh" ]]; then cat <