Comment configurer git push pour définir automatiquement en amont sans -u?
Je veux git push origin
pour définir automatiquement la référence en amont quand je pousse un créé localement branche pour la première fois.
Je sais à propos de git push -u
, mais je ne veux pas avoir à penser à si oui ou non j'ai utilisé -u
avant ou sinon, une référence en amont. En d'autres termes, je veux git push
automatique de l'effet de git push -u
sur toute pression d'une branche qui n'a pas déjà une en amont.
Est-ce possible? Si elle nécessite un alias ou un utilitaire de script, c'est très bien.
- Avez-vous vérifié si il est possible d'utiliser le
push.default
etbranch.<name>.merge
options git-config(1)? - J'ai
push.default
ensemble decurrent
-- c'est comment je peux juste diregit push origin
sans refspec ou en amont. Mais il ne permet pas de définition automatique de l'amont.
Vous devez vous connecter pour publier un commentaire.
Car je ne pense pas que ce soit possible à l'aide de git config, voici ce que vous pouvez faire en bash:
Si la branche a un suivi à distance de la branche, il appelle
git push
sinon il appellegit push -u
git config --global push.default current
.push.default=current
seulement crée une succursale dans le dépôt distant avec le même nom que la section locale, mais ne pas définir la branche locale de la piste de la distance. Je ne sais pas pourquoi c'est le cas, mais il est bon de garder à l'esprit.Remarque: le fait que le par défaut push politique "
simple
" s'appuie sur une branche en amont signifie que:réglage en amont de la branche est considérée comme une démarche volontaire, pas un caché automatisée
Donc, jusqu'à la construction de mechanicalfish's réponse, vous pouvez définir un alias, avec le droit de guillemets doubles (
"
) s'est échappé (\"
):Sc0ttyD propose dans les commentaires l'alias suivantes:
Dans plusieurs lignes:
-u
option existe, et pourquoi il n'y a pas une config pour faire de l'option automatique (d'où le nom).alias gpu='[[ -z $(git config "branch.$(git symbolic-ref --short HEAD).merge") ]] && git push -u origin $(git symbolic-ref --short HEAD) || git push'
Vous pouvez le configurer avec
git config
à l'aide degit config --global push.default current
.Docs: https://git-scm.com/docs/git-config#git-config-pushdefault
git push origin
sans refspec ou en amont. Mais il ne permet pas de définition automatique de l'amont.push
, par exemple, un seul développeur est sur sa branche, qui modifie uniquement une copie d'une mise en pension.J'ai eu le même problème. J'ai trouvé cet alias (.gitconfig)
[alias]
track = "!git branch --set-upstream-to=origin/`git symbolic-ref --short HEAD`"
Utilisation:
git track
une fois par nouvelle branche (extrait). Ensuite, il suffit de pousser comme d'habitude 🙂Les réponses par @VonC et @Frexuz sont utiles, mais deux de leurs solutions produire une erreur pour moi. À l'aide de deux de leurs réponses, j'ai bricolé quelque chose qui fonctionne pour moi:
Cette résultats dans l'exécution soit
git push -u origin $BRANCHNAME
ougit push
, selon que son amont (propriétébranch.$BRANCHNAME.merge
) est défini.Entrer dans cet alias sur la ligne de commande nécessitent des codes d'échappement, de sorte qu'il est probablement plus facile d'utiliser un éditeur à insérer dans le fichier correct (
$HOME/.gitconfig
(global),.git/config
(local), ou/etc/gitconfig
(système) )git config --global -e
J'ai résolu ce problème en utilisant ce simple script Bash. Il ne fonctionne pas sur les branches existantes, mais si vous créez tous vos branches avec cette fonction, vous aurez toujours votre en amont de la branche définie automatiquement.
L' $1 représente le premier argument vous passez après
con
donc c'est comme faire:...il vous suffit de faire ceci:
Simplement:
git push -u
, mais ...". Donc, ce n'est pas de répondre à la question.J'ai fait un git extension avec les scripts utiles, y compris celle-ci:
https://github.com/jvenezia/git-line