La page de manuel de git-config répertorie ces options pour push.default:
nothing - do not push anything.
matching - push all matching branches. All branches having the same name in both ends are considered to be matching. This is the default.
upstream - push the current branch to its upstream branch.
tracking - deprecated synonym for upstream.
current - push the current branch to a branch of the same name.
Dans la plupart des cas, je suppose que pousser vers la branche amont d'une branche équivaudrait à pousser vers une branche du même nom, puisque la branche amont aurait normalement le même nom, et puisque la branche du même nom ("actuelle" ) serait normalement (ou toujours, par définition?) en amont. Alors, quelle est la différence?
MISE À JOUR : La page de manuel de git-config a été mise à jour (comme on pouvait s'y attendre), donc les distinctions qui y sont faitespeuvent être beaucoup plus claires maintenant.
git
git-branch
git-push
iconoclaste
la source
la source
push.default is unset; its implicit value is changing in Git 2.0
et surmatching
vs,simple
consultez stackoverflow.com/questions/13148066/…Réponses:
Vous avez résumé la différence dans votre question.
upstream
pousse vers la branche amont configurée , alors quecurrent
suppose que la branche amont a le même nom que la branche locale actuelle , et pousse vers ce nom spécifique. En réalité, il n'y a aucune raison de supposer que la branche de suivi en amont d'une branche locale porte le même nom que la branche locale elle-même.Par exemple, si vous travaillez dans plusieurs référentiels ou sur de nombreuses télécommandes de développeurs partagées, vous finissez souvent par suivre différentes fourches de la même branche, telles que
allen-master
oususan-master
, qui suivent lamaster
branche dans les dépôts d' Allen et de Susan, respectivement. Dans ce cas, cecurrent
serait le paramètre incorrect, car ces noms de branche n'existent pas sur leurs télécommandes.upstream
, cependant, fonctionnerait très bien.Un exemple plus pratique pourrait être le suivi à la fois d'un référentiel
development
etproduction
. Votre flux de travail peut utiliser une branche principale différente pour chacun, mais cela peut prêter à confusion. Supposons que vous soyez un intégrateur de code et que vous vouliez suivre lesmaster
branches des deux référentiels séparément.Maintenant, vous avez deux branches qui suivent leurs référentiels respectifs, aucune d'elles n'utilisant du tout la
master
convention de dénomination. Il y a peu de confusion sur les noms des branches: ils décrivent explicitement ce qu'ils suivent. Néanmoins, celapush.default = current
n'aurait aucun sens car aucune télécommande ne contient de branchedevelopment
ouproduction
.la source
upstream
est préférablecurrent
. Je pense que c'est assez évident, vous devriez donc plutôt donner un exemple pour le cas contraire.current
est meilleur dans le cas où vous êtes un nouveau développeur car vous n'avez pas besoin degit config
beaucoup, surtout si vous avez cloné de quelque part.current
pousse ou crée-puis-pousse-vers des branches homonymes sur le dépôt distant pour vous si elles n'existent pas déjà, alors que voussimple
refuserez de le faire carrément lorsqu'une branche du même nom n'existe pas déjà.upstream
a le même comportement dans ce cas à moins qu'une branche amont n'ait été explicitement définie ou définie autrement comme mentionné dans la réponse de Yawar .current
poussera la branche actuelle vers une branche du même nom sur le référentiel distant.upstream
poussera la branche actuelle vers la branche amont.La branche amont est une branche qui a été explicitement ou implicitement définie comme étant en amont de votre branche actuelle. Cela signifie que push and pull par défaut se synchronise avec cette branche. La branche amont peut être dans le même dépôt que la branche actuelle elle-même. Vous pouvez faire des choses intéressantes comme configurer votre branche principale locale en amont de votre branche de fonctionnalité locale (sujet), et pousser et tirer entre elles.
La configuration en amont implicite est effectuée via la
branch.autosetupmerge
valeur de configuration. Vous pouvez trouver de la documentation dans lagit config
page d'aide. La configuration amont explicite est effectuée avec l'-u
option de lagit branch
commande. Consultez la page d'aide pour plus de détails.la source
branch.autoSetupMerge
ce soit la même chose que-u
/--set-upstream
. Au moins, je ne vois rien dans la documentation qui implique que git push se comporte comme s'il était appelé-u
par défaut, ce qui me semble être ce que vous dites. Pouvez-vous clarifier ce que vous vouliez dire?branch.autoSetupMerge
configuration crée par défaut une nouvelle branche locale et définit son amont comme branche de suivi à distance. Cette action implicite peut être effectuée explicitement en utilisant les indicateurs-t
(--track
) ou-u ...
(--set-upstream-to=...
), qui font la même chose avec des syntaxes légèrement différentes.git push
, j'ai supposé (à tort) que vous parliez de l'-u
optiongit push
plutôt que de l'-u
optiongit branch
. Désolé pour la confusion :)