git推送失败:`拒绝更新签出的分支:refs/heads/master`

git推送失败:`拒绝更新签出的分支:refs/heads/master`,git,Git,我想在git中存储对JBoss配置的本地修改。为此,我建立了以下结构: lrwxrwxrwx 1 jboss jboss 19 Jan 24 11:53 current -> jboss-as-7.1.0.CR1b drwxr-xr-x 11 jboss jboss 4096 Jan 24 12:13 jboss-as-7.1.0.CR1b -rw-r--r-- 1 jboss jboss 108211143 Jan 23 16:02 jboss-as-7.1.

我想在git中存储对JBoss配置的本地修改。为此,我建立了以下结构:

lrwxrwxrwx  1 jboss jboss        19 Jan 24 11:53 current -> jboss-as-7.1.0.CR1b
drwxr-xr-x 11 jboss jboss      4096 Jan 24 12:13 jboss-as-7.1.0.CR1b
-rw-r--r--  1 jboss jboss 108211143 Jan 23 16:02 jboss-as-7.1.0.CR1b.tar.gz
drwxr-xr-x  6 jboss jboss      4096 Jan 24 11:36 local
local
是git存储库,它应该是“来源”。我的想法是,一旦更新可用,我希望能够轻松地更新我的JBoss发行版。我想在git中存储对分布式JBoss包的所有本地修改

所以,我现在这样做:

jboss@tpl0:~/jboss-as-7.1.0.CR1b$ git init
Initialized empty Git repository in /opt/jboss/jboss-as-7.1.0.CR1b/.git/
jboss@tpl0:~/jboss-as-7.1.0.CR1b$ git remote add origin ../local/   
jboss@tpl0:~/jboss-as-7.1.0.CR1b$ git pull origin master 
From ../local
 * branch            master     -> FETCH_HEAD
到目前为止还不错,我所有的本地修改都在我想要的地方

但是,一旦我进行了本地修改,并希望将它们返回到
local
存储库,我就会收到一个错误:

jboss@tpl0:~/jboss-as-7.1.0.CR1b$ vim standalone/configuration/standalone.xml   
jboss@tpl0:~/jboss-as-7.1.0.CR1b$ git commit -a -m "renamed database to project2_core,   to distinguish from other projects"
[master 3e54f34] renamed database to project2_core, to distinguish from other projects
Committer: jboss <jboss@tpl0.(none)>
 1 files changed, 1 insertions(+), 1 deletions(-)

jboss@tpl0:~/jboss-as-7.1.0.CR1b$ git push origin master 
Counting objects: 9, done.
Compressing objects: 100% (4/4), done.
Writing objects: 100% (5/5), 447 bytes, done.
Total 5 (delta 3), reused 0 (delta 0)
Unpacking objects: 100% (5/5), done.
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 t
remote: error: 'ignore' or 'warn' in the remote repository to allow pushing int
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 som
remote: error: other way.
remote: error: 
remote: error: To squelch this message and still keep the default behaviour, se
remote: error: 'receive.denyCurrentBranch' configuration variable to 'refuse'.
To ../local/
 ! [remote rejected] master -> master (branch is currently checked out)
error: failed to push some refs to '../local/'

现在,目录
~/local
中的分支
current
始终是最新的,但它没有签出,因此我可以将其推入。

推送是为了裸回购。对于非裸回购,你应该参与其中

如果仍要强制执行此操作,可以按照错误消息的状态执行,并将receive.denyCurrentBranch设置为ignore。SSH到您要推送到并运行的回购的位置:

git config receive.denyCurrentBranch ignore

将源(本地)存储库创建为裸存储库(即git init--bare),或签出其中的非主存储库分支。

远程站点的主存储库分支已签出。如果您有访问远程存储库的权限,请签出任何其他分支,然后从存储库中推送。

我通过从“当前”中的“本地”推送而不是从“本地”推送到“当前”来解决这个问题。

或者

初始化远程项目时,使用

git init --bare

我知道这是一个很老的问题,但如果使用git init--bare,请注意“git_DIR=”,如果在推送后使用钩子签出回购,则会为裸回购钩子设置该选项。在钩子例程中使用'export GIT_DIR=.GIT',使其识别您正在进行的回购交易……

谢谢,这为我指明了正确的方向。更新了我的帖子,给出了完整的解决方案。但是你能给出一些命令吗。。?如果我只有一个分支怎么办。。?远程存储库是空的。@vpatil。同样的问题。我希望能够推到一个新的分支。在将一个从bitbucket到linux虚拟服务器的repo提交到一个linux虚拟服务器之后,我刚刚遇到了这个分支的一个可能的副本。在远程repo中执行
gitinit--bare
为我修复了它。为我工作(即,
git config--bool core.bare true
在远程存储库上运行。我认为这是一种比签出其他分支更好的方法。我正在使用sourcetree。我在哪里进行更改?我会这样做。不知怎的,我在创建远程回购时忘记了这是一种方法。
git init --bare