2009-06-03 6 views
3

J'ai couru contre un problème qui git aujourd'hui. J'ai essayé de pousser une branche vers le dépôt distant, mais cela a donné une erreur.Pourquoi git push a parfois besoin d'un argument localref?

Après quelques recherches, je l'ai demandé sur le canal irc git, et quelqu'un a dit que la syntaxe de la poussée était

git push <remote> <localref>:<remoteref> 

Jusqu'à présent, je viens d'utiliser git push qui a bien fonctionné. Mais dans ce cas, il a échoué.

J'ai essayé de pousser une branche autre que le maître au serveur distant, et j'obtenu l'erreur suivante:

error: src refspec xi-temp-dennis does not match any. 
error: failed to push some refs to 'remote.server' 

En spécifiant le localref, il a soudainement worken.

Ma question est, pourquoi ai-je besoin de spécifier le localref cette fois?

Répondre

4

Si vous faites simplement "git push remote" sans spécifier aucune référence à pousser, alors Git poussera tous les "branches correspondantes". Une "branche correspondante" est une branche où le nom de la branche dans le référentiel local est identique à celui d'une branche dans le référentiel distant. La branche de repo distant sera mise à jour en utilisant la branche correspondante du repo local. Donc, si vous avez seulement une branche "master", et que le repo distant a aussi une branche "master", alors tout simplement "git push remote" poussera le maître local vers le maître distant.

Vous avez créé une nouvelle branche, "xi-temp-dennis", qui ne doit pas exister dans le référentiel distant. Par conséquent, Git ne peut pas réussir le comportement par défaut de pousser les branches correspondantes (d'où l'erreur "ne correspond à aucune").

Vous devez dire Git ce que le nom de l'arbitre doit être du côté opposé, et il va créer:

 
git push remote xi-temp-dennis:foo 

Cela créerait une branche distante nommée « foo » qui serait mis à jour. Cependant, son nom ne correspond pas au nom de votre branche locale, donc vous devrez toujours taper cette même commande (avec le xi-temp-dennis: foo) afin de pousser les mises à jour. Si vous voulez être en mesure de taper simplement « git pousser à distance » et ont des mises à jour de travail, vous devez nommer la branche à distance le même que le local:

 
git push remote xi-temp-dennis:xi-temp-dennis 
+0

ouais, je suis juste venu à réaliser que. Quand je faisais git push xi-temp-dennis à distance, il cherchait une branche appelée xi-temp-dennis sur mon dépôt local, alors que je pensais que cela indiquerait la branche sur le dépôt distant. – Ikke

+0

Notez qu'en utilisant 'git push -u ', vous configurez également des informations de suivi qui peuvent être utilisées la prochaine fois pour des commandes telles que 'git pull'. – Ikke

Questions connexes