85 votes

Quelle est la différence entre git push.default=current et push.default=upstream ?

La page de manuel de git-config liste 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 supposerais que pousser vers la branche amont d'une branche serait la même chose que 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 ("courante") serait normalement (ou toujours, par définition ?) en amont. Alors quelle est la différence ?

UPDATE : La page de manuel de git-config a été mis à jour (comme on pouvait s'y attendre), donc les distinctions faites peut être beaucoup plus clair maintenant.

71voto

Christopher Points 9715

Vous avez résumé la différence dans votre question. upstream pousse vers la branche amont configurée, current suppose que la branche amont a le même nom, 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 a le même nom que la branche locale elle-même.

Par exemple, si vous travaillez dans plusieurs dépôts ou à travers de nombreux remotes de développeurs partagés, vous vous retrouvez souvent à suivre différentes bifurcations de la même branche, telles que allen-master ou susan-master qui suivent tous deux le master dans les dépôts d'Allen et de Susan, respectivement. Dans ce cas, current serait un paramètre incorrect, car ces noms de branches n'existent pas sur leurs remotes. upstream Cependant, cela fonctionnerait très bien.

Un exemple plus pratique pourrait être de suivre à la fois un development et production dépôt. Votre flux de travail pourrait utiliser une branche principale différente pour chacune d'elles, mais cela pourrait devenir confus. Supposons que vous soyez un intégrateur de code et que vous vouliez suivre les branches principales des deux dépôts. master branches séparément.

git checkout -b production --track production/master
git checkout -b development --track development/master

Maintenant, vous avez deux branches qui suivent leurs dépôts respectifs, mais aucune n'utilise la fonction master convention d'appellation du tout. Il y a peu de confusion sur les noms des branches : Ils décrivent explicitement ce qu'ils suivent. Néanmoins, push.default = current n'aurait aucun sens, car aucune des deux télécommandes ne contient un fichier development ou production branche.

6voto

Yawar Points 2393

current poussera la branche courante vers une branche avec le même nom sur le dépôt distant.

upstream va pousser la branche courante 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 le push et le pull par défaut se synchroniseront avec cette branche. La branche amont peut être dans le même repo que la branche courante elle-même. Vous pouvez faire des choses intéressantes comme configurer votre local la branche principale en amont de votre local branche feature (sujet), et pousser et tirer entre elles.

La configuration implicite en amont se fait par le biais de la branch.autosetupmerge valeur de configuration. Vous trouverez de la documentation dans le git config page d'aide. La configuration explicite en amont se fait avec la fonction -u à l'option git branch commandement. Consultez la page d'aide pour plus de détails.

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