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:
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 <