Git Push错误预接收挂钩被拒绝


167

我已按照本教程https://github.com/gitlabhq/gitlab-recipes/blob/master/install/centos/README.md的 1-6个步骤在虚拟机上运行gitlabhq rails服务器,并启动了执行命令的rails服务器sudo -u git -H bundle exec rails s -e production。之后,我使用管理员工具创建了用户,并在该用户下创建了新项目。然后,我试图像往常一样将现有项目推送到此仓库中。但是在最后一步,git push origin master失败并显示错误

[远程拒绝]主机->主机(预接收挂钩被拒绝)

附加信息:

1)我尚未通过电子邮件激活链接激活用户(项目所有者),因为我尚未在服务器端配置邮寄服务,并且在本手册中也没有找到有关如何执行此操作的说明。

2)Gitlab服务器生成提示,提示如何将项目推送到仓库中,并且没有repositories/路径。我的意思是它生成git@mygitlabhost:user/repo.git而不是git@mygitlabhost:repositories/user/repo.git正确的。

3)当我试图调试它,我打开pre-receive内部服务器上的回购脚本,并试图输出变量(有其中3) refs = ARGF.readkey_id = ENV['GL_ID']repo_path = Dir.pwd发现,该KEY_ID总是空的。也许问题出在这里...如果是这样,请给我有关如何解决该问题的建议。谢谢


15
我发誓,每个软件开发团队至少每天都有人醒来,并思考如何使其他开发人员的生活更加艰难。
samayo

似乎有一个非常流行的答案必须对大多数人有用。在我的情况下,当尝试推送时偶然从另一台机器进行了另一次推送时,从Git Hub收到了相同的消息。
Hack-R

Answers:


230

GitLab默认标记master分支为protected(见第三部分Protecting your codehttps://about.gitlab.com/2014/11/26/keeping-your-code-protected/为什么)。如果您的情况如此,则可以帮助您:

打开项目>设置>存储库,然后转到“受保护的分支”,在列表中找到“主”分支,然后单击“取消保护”,然后重试。

通过https://gitlab.com/gitlab-com/support-forum/issues/40

对于版本8.11及更高版本,此处操作方法:https//docs.gitlab.com/ee/user/project/protected_branches.html#restricting-push-and-merge-access-to-certain-users


8
用户界面有所变化:在项目“设置”之后,单击“存储库”选项卡。然后是“受保护的分支机构”
Donn Lee

所以我遇到了OP所遇到的相同问题,这个解决方案对我有用,谢谢!但是现在我想知道,为什么?我已经使用gitlab一段时间了,突然之间我已经这样做了吗?发生了什么变化?
安德鲁·拉玛拉

2
由于GitLab 8.11选项有所更改,请在此处
Arghya C

面临同样的问题。在这里,我什至不能推其他分支。我是第一次推它。
桑托什·卡丹

1
我删除了未受保护的内容,但是现在会发生什么?世界上还有其他人可以从事此仓库吗?
Flutterer

14

在我的本地机器上解决以下问题:

答:首先,请确保您使用正确的登录详细信息连接到Bitbucket Server(即,属于您的用户名/密码/ SSH密钥) 

B.然后,确保在本地Git配置中正确设置了名称/电子邮件地址:为您要推送的帐户设置本地Git配置(检查会断定您是提交文件的人)*请注意,名称和电子邮件地址都区分大小写*也区分大小写-一些公司帐户的名称中有多余的空格/字符。“ Contractor/ space space(LDN)”。您的配置中必须包含与Bitbucket Server上相同数量的空格。如果卡住,请在记事本中检查。

C.如果您使用了错误的帐户,只需切换您的帐户凭据(用户名/密码/ SSH密钥),然后尝试再次输入即可。

D.否则,如果您的本地配置不正确,则需要对其进行修改

对于MAC

open -a TextEdit.app ~/.gitconfig

注意:您将必须修复您尝试推送的旧提交。

  1. 修改最后一次提交:

    > git commit --amend --reset-author
    
      
    <save and quit the commit file text editor that opens, if Vim then
    :wq to save and quit>
    
  2. 尝试重新推送您的提交:

    > git push
    

12

就我而言,我的团队导致创建了一个存储库(存储库为空)并将我分配为开发人员,因此当我直接推送到代码以掌握我所面临的错误时,! [remote rejected] master -> master (pre-receive hook declined)如何将他分配给我作为维护人员,所以能够将代码直接推送给主服务器。


10

似乎问题出在某些服务上,例如sidekiq。运行sudo -u git -H bundle exec rake gitlab:check RAILS_ENV=production输出与配置有关的所有问题。




2

可能并非如此,但这就是我的“ 接收前挂钩被拒绝的解决方案 ”错误:

有些存储库仅允许通过Pull Request进行修改。这意味着您必须

  1. 创建一个新分支,以要将更改推送到的分支为基础。
  2. 提交更改并将其推送到新分支。
  3. 打开一个“拉取请求”以将您的分支与原始分支合并。

0

您需要将ssh密钥添加到您的git帐户,如果它抛出错误,则删除以前的ssh密钥并创建一个新的ssh密钥,然后添加。


那没有帮助。:(在两个帐户上都进行了测试-分别在vm和本地计算机上对root和myuser进行了测试
Hroft

检查git remote -v,是否添加了git repo?
Hardik Hardiya 2015年

'git remote -v'输出:origin git @ mygitlabhost:repositories / user / repo.git(获取)origin git @ mygitlabhost:repositories / user / repo.git(推送)
Hroft

如果您使用的是托管gitlab,则问题可能出在他们这边。几分钟后再试一次。
Erik Aronesty

0

我通过改变解决了这个问题,remote 'origin' urlhttpgit在协议.git/config


0

转到项目设置->挂钩->(在下面)预接收挂钩

在提交中禁用cp require issue reference


0

我偶然发现了使用BitBucket的同一错误。我有一个本地Git存储库,想在线备份,所以我用我的BitBucket帐户(使用Web界面)创建了一个新的存储库。

运行后git remote add origin git@bitbucket.org:StatMarianne/<a private repo>.git,我git push origin master无济于事(我通常不将-u选项与git push因为我不介意在推和拉时键入完整的repo和分支名称)。

错误显示为:

remote: You're not allowed to write to this repository.
To bitbucket.org:StatMarianne/<a private repo>.git
 ! [remote rejected] master -> master (pre-receive hook declined)
error: failed to push some refs to 'git@bitbucket.org:StatMarianne/<a private repo>.git'

但是当我跑步时,我的当地分公司确实成功地被推开了 git push -u origin master(严格按照BitBucket的指示进行)。

我感到很惊讶,因为-u--set-upstream)仅应“添加上游(跟踪)引用...”。


-1

我也遇到过同样的问题,这是因为我直接在master分支中推送了我的代码,而我对此没有任何权利。因此,我将代码推送到一个新的分支中,然后,我创建了一个拉取请求以与master合并。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.