0

我正在为他们提供的 GIT 使用 1und1.de 服务。现在我正在设置它,并使用命令 git pull ssh://.........

但是当我尝试 git push ssh://...... 我收到了很多错误:

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 incosistent

Auto packing the repository for optimum performance.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 arranged to update its work tree to match waht you pushed in some other way.

remote: error: to sqelch this message and still keep the default behaviour, set
remote: error: receive.denyCurrentBranch' configuration variable to 'refuse'.
! [remote_rejected] master -> master (branch is currently checked out)
error: failed to push some refs to 'ssh://........' 
4

2 回答 2

1

当您设置要推送到的存储库时,请将其设置为bare存储库:

git init --bare

虽然在技术上可以推送到带有工作目录的 repo,但这太让人头疼了,在这种情况下,你甚至不想要那个。

只需将 repo 重新创建为一个裸仓库或从中创建一个裸仓库 ( git clone --bare /path/to/repo)

于 2013-03-23T19:10:09.420 回答
1

有两种类型的 Git 存储库。通常调用一个foo.git存储库并且没有工作树,只有 Git 的内部文件。非裸存储库是一棵工作树(即包含所有文件的目录),其中还包含一个名为.git. 正如错误消息所解释的,推入非裸存储库通常是一个坏主意,因为当你这样做时,工作树对存储库来说已经过时了。

当您托管一个供人们拉取和推入的存储库时,您几乎总是想要一个裸存储库。在这种情况下,您似乎创建了一个非裸存储库。由于您没有提供有关如何创建存储库的任何详细信息,因此我无法告诉您您做错了什么,但您可以通过以下两种方式之一创建一个裸存储库:

  1. 从要创建存储库的目录中,发出git clone --bare path/to/original.git. 这会将源代码克隆到original.git您所在目录中的裸存储库。
  2. 从要创建存储库的目录中,发出git init --bare foo.git. foo.git这将在您所在的目录中创建一个空的裸存储库。

你可以做更多的事情,但它们是最容易做对的。在现有存储库中发布git config --set core.bare false将使 Git 从那时起认为它是一个裸存储库,但是您必须自己删除工作树,并且您可能应该将存储库从 重命名.gitfoo.git.

于 2013-03-23T19:10:40.450 回答