2010-10-23 103 views
6

有一个远程git裸回购,我从其中一台机器上推出了一个分支,并将其拉到另一台机器上。推送到裸Git仓库时出现'receive.denyCurrentBranch'错误

提出的其他机器上的一些变化,努力推动这些更改回远程裸露的回购协议,我也得到了“receive.denyCurrentBranch”的错误。

发生了什么事?

这不应该发生在裸回购 - 没有检查出它。

从机2看到的分支是:

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

“修复”是在两个dev的机器当前分支。

当我最初拉机2分支上,我所做的:

git pull 
git checkout -b Fix origin/Fix 

我怀疑的第一个“遥控器”线 - 似乎HEAD应指向我的当前分支,但它不是。我想我失去了一些东西,在这里..

更新1 我兼并了“修复”分支下到DEV1分支,然后在PUSHD“DEV1”分支 - 即工作确定(我正要办无论如何)。

所以,这是一种解决方法,但我认为真正的问题是HEAD没有绑定到当前分支('Fix'),而是绑定到非活动分支('dev1')。我不知道如何改变远程回购的头部?

+0

有人请纠正我,如果我错了,但裸存储库不应该连*有*为HEAD。这将表明有一个工作目录,并且HEAD指向它基于的提交...您是否确定远程回购是裸露的? – Jonathan 2010-10-26 17:08:16

+0

非常确定。没有检出项目,所有'git'文件都位于存储库的顶级目录中。 – rickb 2010-10-27 20:34:43

+0

Jonathan,一个纯粹的Git仓库确实有HEAD,但没有默认的工作区。裸仓库仍然可以存在工作空间,但必须使用环境变量'GIT_WORK_TREE'或Git选项'--work-tree'告知Git它存在的位置,并使用环境变量'GIT_DIR'或选项'' - -git-dir'。 – 2011-04-05 15:18:01

回答

1

从机器2,上传本地仓库到远程仓库裁判可以在push命令使用明确的裁判:

git push origin Fix:refs/heads/Fix 

后,在机器1,你应该使用fetch命令获得远程裁判

git fetch 

在分支机构的名单(GIT分支-A),您将使用发现产地/修复(或遥控器/产地/修复),你可以在浏览器的远程分支的内容直接结帐命令:

git checkout origin/Fix 

进行修改,提交,等...然后用机2中使用的相同的命令将其推:

git push origin Fix:refs/heads/Fix 

为了跟踪分支(这是创建一个本地分支那个“点”远程分支,使用带有--track选项检出命令):

git checkout --track -b Fix origin/Fix 

然后,您可以在工作名当地分支机构修复,做推拉无其他参数

git pull 
git commit 
git push