无法进入git仓库

时间:2010-07-11 04:28:15

标签: git

这是我到目前为止所做的,我会说这个程序适用于Ubuntu 9.10,它可能有不同版本的git。

server: mkdir ~/git

local: scp -r /../project name@url.com:~/git/
server: cd git
        cd project
        git init 
        git add .
        git commit -a -m "initial"

local: git clone name@url.com:/../git/project /home/name/project
   cd project
   capify .  (from the ruby gem capistrano)
   git add .
   git commit -a -m "capified"
   git push

当我尝试推出时,我收到此错误消息:

   remote: error: refusing to update checked out branch: refs/heads/master
   remote: error: By default, updating the current branch in a non-bare repository
   remote: error: is denied, because it will make the index and work tree inconsistent
   remote: error: with what you pushed, and will require 'git reset --hard' to match
   remote: error: the work tree to HEAD.
   remote: error: 
   remote: error: You can set 'receive.denyCurrentBranch' configuration variable to
   remote: error: 'ignore' or 'warn' in the remote repository to allow pushing into
   remote: error: its current branch; however, this is not recommended unless you
   remote: error: arranged to update its work tree to match what you pushed in some
   remote: error: other way.
   remote: error: 
   remote: error: To squelch this message and still keep the default behaviour, set
   remote: error: 'receive.denyCurrentBranch' configuration variable to 'refuse'.
   To ...
   ! [remote rejected] master -> master (branch is currently checked out)
   error: failed to push some refs to

8 个答案:

答案 0 :(得分:72)

在服务器端,执行以下操作:

git config receive.denyCurrentBranch ignore

然后你可以在当地推进。

答案 1 :(得分:45)

现在可以推出非裸机回购(Git 2.3.0 2015年2月) 当您推动当前在远程仓库检出的分支时,它是可能的!

commit 1404bcbJohannes Schindelin (dscho)

  

receive-pack:为receive.denyCurrentBranch

添加其他选项      

在工作目录之间进行同步时,通过“push”而非“pull”更新当前分支非常方便,例如:从VM内部推送修复程序时,或推送用户计算机上的修复程序时(开发人员无权安装ssh守护程序,更不用说知道用户的密码)。

     

此修补程序不再需要常见的解决方法 - 推入临时分支然后在另一台计算机上合并。

     

新选项是:

updateInstead
  

相应地更新工作树,但如果有任何未提交的更改,则拒绝这样做。

那是:

git config receive.denyCurrentBranch updateInstead

答案 2 :(得分:7)

正如我在这篇文章中指出的那样heroku-like git setup? 推进工作存储库有点危险,因为推进时没有考虑任何正在进行的工作,并且随后很容易丢失任何未提交的更改(基本上工作的HEAD可能与工作分支HEAD不一致)。 Git现在有一个警告告诉你这个 - 血腥,细节在以下链接:

git push to a non-bare repository

建议您发布的存储库应该是一个没有签出树的裸仓库。 Bare repos是使用“git clone --bare”选项创建的。

答案 3 :(得分:5)

由于您在服务器上运行了git init,因此您创建了一个 working directoy ,但我认为您想要创建一个裸存储库

如果要在开发计算机上本地添加,编辑和删除项目中的文件,请使用工作目录。

当您想要共享项目时,请在服务器上通过git init --bare project.git创建一个裸存储库,然后将其克隆到您的计算机上,您就可以推送到它。

如果您现在不想创建新项目,那么您可以通过git clone --bare project new-bare-project.git

将项目克隆到新的裸仓库中

答案 4 :(得分:2)

尝试以下命令:

git config receive.denyCurrentBranch warn

答案 5 :(得分:1)

答案 6 :(得分:1)

VonC的回答很有帮助,但我花了一些时间才意识到,对于Windows,命令将是以下而没有等于。

d:\Repositories\repo.git>git config receive.denyCurrentBranch updateInstead

我的版本是Git for Windows v2.11.1

答案 7 :(得分:0)

客户端和服务器端

d:\Repositories\repo.git>git config receive.denyCurrentBranch updateInstead

我没有为我工作。客户端和服务器的版本都是2.16.2.windows.1

我将此添加到\\ File-server \ projectFolder \ .git \ config

[receive]
    denyCurrentBranch = updateInstead

这适用于windows.Don不需要init --bare