无法推送到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
cards asked 2020-08-04T23:24:27Z
7个解决方案
75 votes

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

git config receive.denyCurrentBranch ignore

然后,您可以在本地推送。

HaveF answered 2020-08-04T23:24:56Z
46 votes

现在可以推送到非裸仓库(Git 2.3.0 February 2015)。
当您在远程仓库中推送当前已签出的分支时,这是可能的!

参见Johannes Schindelin(push)的commit 1404bcb:

push:为pull添加另一个选项

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

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

新选项是:

updateInstead

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

那是:

git config receive.denyCurrentBranch updateInstead
VonC answered 2020-08-04T23:25:51Z
7 votes

正如我在这篇文章中指出的,类似heroku的git设置?推送到工作存储库有点危险,因为推送不会考虑任何进行中的工作,随后很容易丢失任何未提交的更改(基本上,工作HEAD可能会与工作分支HEAD脱节)。 Git现在有一个警告通知您-血腥的详细信息在以下链接中:

git push到非裸仓库

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

Dipstick answered 2020-08-04T23:26:21Z
5 votes

由于您在服务器上运行了git clone --bare project new-bare-project.git,因此创建了工作目录,但我认为您想创建一个裸仓库。

当您想在开发机器上本地添加,编辑和删除项目中的文件时,请使用工作目录。

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

如果您现在不想创建一个新项目,则可以在git clone --bare project new-bare-project.git之前将项目克隆到一个新的裸仓库中

nilsi answered 2020-08-04T23:26:54Z
5 votes

请尝试以下命令:

git config receive.denyCurrentBranch warn
Motra answered 2020-08-04T23:27:14Z
1 votes

VonC的回答很有帮助,但是我花了一些时间才意识到,对于Windows,命令如下所示。

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

我的版本是Windows Git v2.11.1

J D answered 2020-08-04T23:27:38Z
0 votes

客户端和服务器端

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

不适用于我客户端和服务器版本均为2.16.2.windows.1

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

[receive]
    denyCurrentBranch = updateInstead

这适用于Windows。不需要init --bare

AllenBooTung answered 2020-08-04T23:28:11Z
translate from https://stackoverflow.com:/questions/3221859/cannot-push-into-git-repository