2011-09-17 3 views
4

que je cherchais autour de l'Internet et ne peut pas trouver ce que cela fait:git pousser question

git push origin master:refs/heads/master 

Quelle est la différence avec tout simplement:

git push origin master 

Merci.

Répondre

6

Dans les versions de git antérieures à la version 1.5.5.2, il existait une différence importante entre ces commandes. Vous deviez utiliser le nom complet de l'arbitre du côté destination de la refspec si cette branche n'existait pas déjà. (La validation qui a modifié ce comportement a an interesting description of the change.)

Dans les versions actuelles de git, il n'y a aucune différence entre les deux, tant que master est sans ambiguïté dans le référentiel de destination - c'est presque toujours le cas, sauf si vous avez fait quelque chose de délibérément confus comme créer une étiquette appelée master. Lorsque vous faites git push origin master, git essaie d'interpréter master comme refspec. Étant donné que cette refspec n'a pas : séparant la source et la destination refs, il suppose par défaut que vous voulez dire:

git push origin master:master 

... et les noms ref incomplets sont portés à refs/heads/master des deux côtés (encore une fois, aussi longtemps que master est non ambigu dans les dépôts source et destination).

+0

Merci pour la clarification Mark –

3

Il n'y a pas de différence. L'un est juste une version plus verbeuse de l'autre.

master:refs/head/master est dire pousser votre master locale aux télécommandes refs/head/master

Pour plus de détails, regardez la dernière partie de this page.

+2

En fait, le comportement de 'git pousser ' est pas affectée par le suivi - il est toujours étendu à 'git pousser : '. –

+0

Merci pour la clarification Mark. Je ne le savais pas. – Andy