2010-10-23 13 views
6

Avoir un git distant repo sur lequel j'ai poussé une branche d'une machine, et tiré sur une autre machine.Obtenir l'erreur 'receive.denyCurrentBranch' en poussant pour mettre à nu le repo Git

J'ai effectué des modifications sur l'autre machine, en essayant de repasser ces modifications sur le repo distant et je reçois l'erreur 'receive.denyCurrentBranch'.

Que se passe-t-il?

Ceci n'est pas supposé se produire sur un repo nu - il n'y a rien de vérifié.

Les branches comme on le voit de la machine 2 sont:

Fix 
dev1 
dev2 
remotes/origin/HEAD -> origin/dev1 
remotes/origin/Fix 
remotes/origin/dev1 
remotes/origin/dev2 
remotes/origin/master 

'Fix' est la branche en cours sur les deux machines de dev.

Quand j'ai tiré à l'origine de cette branche sur la machine 2, je l'ai:

git pull 
git checkout -b Fix origin/Fix 

Je me méfie de la première ligne « » Distants - semble que la tête doit pointer vers ma branche en cours, mais il n'est pas. Penser que je me manque quelque chose, ici ..

Update 1 J'ai fusionné la branche « Fix » vers le bas à la branche dev1, puis PUSHD la branche « dev1 » - qui marchait bien (j'allais faire ça, de toute façon). Donc, c'était une solution de contournement, mais je pense que le vrai problème était que le HEAD n'était pas lié à la branche actuelle ('Fix'), mais à une branche inactive ('dev1'). Je ne suis pas sûr de savoir comment changer la tête sur le repo à distance?

+0

Quelqu'un s'il vous plaît me corriger si je me trompe, mais les dépôts nus ne sont pas censés avoir même * * une HEAD.Cela indiquerait qu'il existe un répertoire de travail, et que HEAD pointe vers le commit sur lequel il est basé ... Êtes-vous certain que le repo distant est vide? – Jonathan

+0

Assez sûr. Il n'y a pas de projet extrait, et tous les fichiers 'git' se trouvent dans le répertoire de premier niveau du dépôt. – rickb

+0

Jonathan, un référentiel Git nu a un HEAD, mais pas d'espace de travail par défaut. Un espace de travail peut toujours exister pour un dépôt nu, mais vous devez informer Git où il existe en utilisant la variable d'environnement 'GIT_WORK_TREE' ou l'option Git' --work-tree' et l'emplacement du référentiel en utilisant la variable d'environnement 'GIT_DIR' ou l'option' -git-dir'. –

Répondre

1

de la machine 2, télécharger refs du référentiel local pour dépôt distant, vous pouvez utiliser refs explicites dans la commande push:

git push origin Fix:refs/heads/Fix 

Après cela, dans la machine 1, vous devez utiliser la commande fetch pour obtenir les refs à distance

git fetch 

Dans la liste des branches (branche git -a), vous origine trouvé/Fix (ou remotes/origine/Fix), vous pouvez navigateur le contenu de la branche à distance directement à l'aide la commande de sortie:

git checkout origin/Fix 

Faites vos modifications, valider, etc ... puis le pousser en utilisant la même commande utilisée dans la machine 2:

git push origin Fix:refs/heads/Fix 

Pour suivre la branche (ce qui est, créer une branche locale que "points" la branche à distance, utilisez la commande de commande avec l'option --track):

git checkout --track -b Fix origin/Fix 

Ensuite, vous pouvez travailler sur branche locale Fix et ne pousser et tirer sans autres arguments

git pull 
git commit 
git push