Git推送错误预接收挂钩拒绝

时间:2015-02-04 10:07:28

标签: gitlab githooks

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

  

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

其他信息:

1)我没有通过电子邮件激活链接激活用户(项目所有者),因为我没有在服务器端配置后期服务,我在本手册中没有找到如何操作的说明。

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

3)当我尝试调试它时,我在服务器上的repo中打开了pre-receive脚本,并尝试输出变量(其中有3个):refs = ARGF.readkey_id = ENV['GL_ID']和{ {1}}并发现,key_id始终为空。也许问题就在这里......如果是这样,请给我一些如何解决这个问题的建议。感谢

16 个答案:

答案 0 :(得分:162)

默认情况下,GitLab将master分支标记为protected(请参阅https://about.gitlab.com/2014/11/26/keeping-your-code-protected/中的Protecting your code部分原因)。如果是这样,那么这可以帮助:

  

打开您的项目>设置[>存储库选项卡]并转到"受保护的分支机构",选择:"开发人员可以推送"然后再试一次。

通过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

答案 1 :(得分:7)

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

答案 2 :(得分:6)

  

在本地计算机中解决了以下问题:

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

B中。然后,确保在本地Git配置中正确设置了名称/电子邮件地址:为您尝试推送的帐户设置本地Git配置(检查断言您是提交文件的人)     *请注意,这是区分大小写的,包括姓名和电子邮件地址     *它也是空间敏感的 - 一些公司帐户的名称中有额外的空格/字符,例如。 “Contractor/ space space(LDN)”。您必须在配置中包含与Bitbucket Server相同数量的空格。如果卡住了,请在记事本中查看。

℃。如果您使用的是错误的帐户,只需切换您的帐户凭据(用户名/密码/ 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
    

答案 3 :(得分:5)

我已遵循heroku日志img https://devcenter.heroku.com/articles/buildpacks#detection-failure的说明(使用cmd:heroku日志->显示您的错误) 然后执行cmd:“ heroku buildpacks:clear”。终于对我有用了!

答案 4 :(得分:3)

在我的情况下,我的团队导致创建了一个存储库(存储库为空),并将我分配为开发人员,因此当我直接推送到代码以掌握错误时,我遇到了{{1} }因此,他以 maintainer 的身份分配给我的方式是固定的,因此我能够将代码直接推送给master。

答案 5 :(得分:2)

您可能没有开发人员访问项目或主分支。您需要dev访问权限来推动新工作。

新工作意味着新的分支和提交。

答案 6 :(得分:1)

可能不是这样,但这是我的“预接收挂钩拒绝”错误的解决方案:

有些存储库只允许通过拉取请求进行修改。这意味着您必须

  1. 创建一个新分支,以您要将更改推送到的分支为基础。
  2. 提交并将更改推送到新分支。
  3. 打开Pull Request以将您的分支与原始分支合并。

答案 7 :(得分:1)

这是因为 Master 分支受到保护,以下是清除此错误的步骤。

  1. 在您的主分支中创建一个分支 git checkout -b new-branch-name
  2. 推送新分支 git push --set-upstream origin new-branch-name
  3. 现在远程将分支合并到主分支。
  4. 合并后,重置本地主分支 git reset --soft HEAD~1
  5. 最后git pull

答案 8 :(得分:0)

我通过将remote 'origin' url中的httpgit更改为.git/config协议来解决了这个问题

答案 9 :(得分:0)

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

禁用 cp要求在提交中引用问题

答案 10 :(得分:0)

To use npm to install your application's dependencies please delete the yarn.lock file.

To use yarn to install your application's dependences please delete the package-lock.json file.

答案 11 :(得分:0)

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

运行git remote add origin git@bitbucket.org:StatMarianne/<a private repo>.git之后,我git push origin master毫无用处(我通常不对git push使用 -u 选项,因为我没有推入和拉入时,请记住输入完整的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)仅应“添加上游(跟踪)参考...”。

答案 12 :(得分:0)

尽管该问题特定于gitlab,但在github上可能会发生类似的错误,具体取决于它的设置方式(通常是 Github Enterprise )。

您需要熟悉以下概念:

  • 预接收挂钩
  • 组织网络钩子
  • Webhooks

Webhooks 比其他两项更容易理解。

预接收挂钩

是在GitHub Enterprise服务器上运行的脚本 执行政策。进行推送时,每个脚本都会在 isolated environment 确定是否接受推送。

组织网络钩子:

Webhook事件也从您的存储库发送到“组织webhooks”。 more info

这些是在您的github企业中设置的。它们特定于 github企业版的版本。 由于访问限制(开发人员,维护人员,管理员等),您可能没有可见性。

答案 13 :(得分:0)

请检查“开发中”中JIRA的状态。 对我来说,不是,当我将jira的身份更改为“开发中”时,它对我有用。

答案 14 :(得分:0)

请尝试:

git push -u origin master

如果仍然无法推送成功,请创建一个新分支或选择另一个分支并推送到新分支

答案 15 :(得分:-1)

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