2010-02-19 4 views
4

J'ai une branche master et une branche searchfeature dans mon projet. Je l'ai poussé la branche searchfeature au dépôt distant, tout va bien jusqu'à présentGit Push Questions - Pedantique

Quand je travaillais sur cette branche, ce matin, je l'ai « git push » Je suis arrivé ce qui suit:

warning: You did not specify any refspecs to push, and the current remote 
warning: has not configured any push refspecs. The default action in this 
warning: case is to push all matching refspecs, that is, all branches 
warning: that exist both locally and remotely will be updated. This may 
warning: not necessarily be what you want to happen. 
warning: 
warning: You can specify what action you want to take in this case, and 
warning: avoid seeing this message again, by configuring 'push.default' to: 
warning: 'nothing' : Do not push anything 
warning: 'matching' : Push all matching branches (default) 
warning: 'tracking' : Push the current branch to whatever it is tracking 
warning: 'current' : Push the current branch 

Je suis donc allé à l'avance a fait un git config push.default suivi et voila, git push fonctionne ce pas de problème, pas d'avertissement. Ce que je ne comprends pas est ce que la différence entre "courant" et "suivi" est, si vous ne faites pas "à quoi que ce soit suivi" alors quel est le point de "courant" - où irait-il? , quels scénarios utiliseriez-vous plutôt que de suivre?

En outre, quels scénarios utiliseriez-vous jamais "rien"?

Répondre

6

Depuis Git1.6.3:

Lorsque l'utilisateur ne dit pas "git push" quoi pousser, il a toujours poussé refs correspondants.
Pour certaines personnes, il est inattendu et une nouvelle variable de configuration push.default a été introduite pour permettre de modifier un comportement par défaut différent.
Pour annoncer la nouvelle fonctionnalité, un gros avertissement est émis s'il n'est pas configuré et qu'une tentative de git sans arguments est tentée.

Ainsi, la différence entre le courant et le suivi est que:

  • courant prendra un arbitre correspondant (une branche à distance avec le même nom, qui peut ne pas exister)
  • suivi sera basé le ref distant à utiliser sur le ref de suivi associé à cette branche locale. S'il ne suit rien, il ne poussera pas. Mais il peut suivre une branche à distance avec un remo name.a différent

Note: default nothing serait utile pour le dépôt en lecture seule, fait que la consultation de contenu, où aucun travail est censé être fait et publié partout. Voir également la question SO git push current branch.


Mise à jour Mars 2012: Attention: cette valeur par défaut "correspondant à" la politique peut changer rapidement:

Voir "Please discuss: what "git push" should do when you do not say what to push?"

Dans le contexte actuel (c.-à-push.default=matching), git push sans argument va pousser toutes les branches qui existent localement et à distance avec le même nom.
Ceci est généralement approprié lorsqu'un développeur pousse vers son propre référentiel public, mais peut être déroutant, voire dangereux, lors de l'utilisation d'un référentiel partagé.

La proposition est de la valeur par défaut changement de « upstream », à savoir que pousser la branche courante, et le pousser à la traction git branche se tirer de.
Un autre candidat est 'current'; cela ne pousse que la branche actuelle vers la branche distante du même nom.

Ce qui a été discuté à ce jour peut être vu dans ce fil:

http://thread.gmane.org/gmane.comp.version-control.git/192547/focus=192694

précédentes discussions pertinentes comprennent:

Pour participer à la discussion, envoyez vos messages à: [email protected]