133 votes

Comment configurer git push pour qu'il définisse automatiquement upstream sans -u ?

Je veux git push origin pour définir automatiquement la référence amont lorsque je pousse une branche créée localement pour la première fois.

Je suis au courant git push -u mais je ne veux pas avoir à penser si oui ou non j'ai utilisé -u avant de fixer une référence en amont ou autrement. En d'autres termes, je veux git push pour avoir automatiquement l'effet de git push -u sur tout push d'une branche qui n'a pas déjà un upstream.

Est-ce possible ? Si cela nécessite un alias ou un utilitaire script, c'est parfait.

104voto

Andrea Bergonzo Points 691

Vous pouvez le configurer avec git config en utilisant git config --global push.default current .

Docs : https://git-scm.com/docs/git-config/#Documentation/git-config.txt-pushdefault

33voto

mechanicalfish Points 5493

Comme je ne pense pas que cela soit possible en utilisant git config, voici ce que vous pouvez faire en bash :

[[ $(git config "branch.$(git rev-parse --abbrev-ref HEAD).merge") = '' ]] && git push -u || git push

Si la branche courante a une branche de suivi à distance, elle appelle git push sinon, il appelle git push -u

24voto

VonC Points 414372

Remarque : le fait que le nouvelle politique de poussée par défaut " simple " s'appuie sur une branche ayant un amont signifie que :
la création d'une branche amont est considérée comme une démarche volontaire, et non comme une démarche automatisée cachée

Quand " git push [$there] "ne dit pas ce qu'il faut pousser, nous avons utilisé la sémantique traditionnelle de "correspondance" jusqu'à présent (toutes vos branches ont été envoyées au distant tant qu'il y a déjà des branches du même nom là-bas).

Nous utiliserons le " simple "qui pousse la branche actuelle vers la branche du même nom, uniquement lorsque la branche actuelle est prête à intégrer cette branche distante .
Il existe une variable de configuration des préférences de l'utilisateur " push.default "pour changer cela.


Donc, en partant de poisson mécanique 's respuesta vous pouvez définir un alias, avec les bons guillemets ( " ) échappé ( \" ) :

git config alias.pu "![[ $(git config \"branch.$(git rev-parse --abbrev-ref HEAD).merge\") = '' ]] && git push -u || git push"

git pu origin

Sc0ttyD propose dans les commentaires l'alias suivant :

alias gpu='[[ -z $(git config "branch.$(git symbolic-ref --short HEAD).merge") ]] && git push -u origin $(git symbolic-ref --short HEAD) || git push'

En plusieurs lignes :

alias gpu='[[ -z $(git config "branch.$(git symbolic-ref --short HEAD).merge") ]] && 
           git push -u origin $(git symbolic-ref --short HEAD) || 
           git push'

24voto

Frexuz Points 1693

J'ai eu le même problème. J'ai créé cet alias (à partir de mon fichier .gitconfig )

[alias]
    track = "!git branch --set-upstream-to=origin/`git symbolic-ref --short HEAD`"

Utilisation :

  1. Une fois par nouvelle branche (actuellement vérifiée) : git track
  2. Poussez comme d'habitude :)

19voto

Mark Points 312

Les réponses de @VonC et @Frexuz sont utiles, mais leurs deux solutions produisent une erreur pour moi. En utilisant leurs deux réponses, j'ai bricolé quelque chose qui fonctionne pour moi :

    [alias]
    pu = ![[ $(git config "branch.$(git symbolic-ref --short HEAD).merge") = '' ]] && git push -u origin $(git symbolic-ref --short HEAD) || git push

Cela entraîne l'exécution soit git push -u origin $BRANCHNAME o git push selon que son amont (propriété branch.$BRANCHNAME.merge ) est défini.

La saisie de cet alias sur la ligne de commande nécessitera des codes d'échappement, il est donc probablement plus facile d'utiliser un éditeur pour l'insérer dans le bon fichier ( $HOME/.gitconfig (global), .git/config (local), ou /etc/gitconfig (système) )

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X