0

我是 git 新手,遇到问题我在 git 系统中推送数据时遇到问题。我安装了 git 和 gitolite 但是当我打电话时:“git push origin master”它给了我这个错误:

Counting objects: 12, done.
Compressing objects: 100% (9/9), done.
Writing objects: 100% (12/12), 1.47 KiB, done.
Total 12 (delta 1), reused 5 (delta 0)
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 gitolite@server.nl:gitolite-admin
 ! [remote rejected] master -> master (branch is currently checked out)
error: failed to push some refs to 'gitolite@server.nl:gitolite-admin'

我按照本教程安装 gitolite:gitolink 一切正常,但在最后一步。当我执行命令时,我很遗憾地得到了这个错误

谁能告诉我该怎么做或如何解决这个问题?已经尝试过: git config --bool core.bare true 更改分支(以便它(主)不在使用中)

4

1 回答 1

0

The basic problem is that you're trying to push to a "none-bare" git repository. Whilst this is possible, a lot of the documentation and books don't make it clear that this isn't recommended.

So while git is a decentralised/many-master scm, in practice what you tend to have is "master" or "central" repositories that you clone from and push to and serve as the "canonical" repo, and work repos (eg on your laptop) that you cloned from a "master" that you pull to and push from. These "master" repositories should be created with --bare:

server$ cd ; mkdir git
server$ git clone --bare /home/user/foo /home/user/git/foo.git

Once you've done this, you'll be able to push from your laptop:

laptop$ cd foo
laptop$ git remote -v
laptop$ origin user@server:/home/user/git/foo.git (fetch)
laptop$ origin user@server:/home/user/git/foo.git (push)
laptop$ git push origin master

You could also do on the server:

git config --global receive.denyCurrentBranch "ignore"

But I wouldn't do this until you understand better how git works.

于 2011-08-05T00:36:53.110 回答