Git推送错误,预接收钩子被拒绝

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

[远程拒绝]master -> master(预接收钩子拒绝)

额外的信息:

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

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']repo_path = Dir.pwd,发现key_id总是空的。也许问题就在这里……如果是这样,请给我建议如何解决。谢谢

744370 次浏览

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

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

GitLab默认将master分支标记为protected(参见https://about.gitlab.com/2014/11/26/keeping-your-code-protected/ why中的Protecting your code部分)。如果你的情况是这样,那么下面的方法会有所帮助:

打开你的项目> Settings > Repository,进入“Protected branches”,在列表中找到“master”分支,然后点击“Unprotect”再试一次。

通过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. 创建一个新分支,以您想要将更改推入的分支为基础。
  2. 提交并将更改推送到新分支。
  3. 打开一个Pull Request来合并你的分支和原来的分支。

以下是我本地机器中解决的问题:

A.首先,确保您使用正确的登录细节连接到Bitbucket服务器(即。您的用户名/密码/SSH密钥)

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

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. Try re-pushing your commits:

    > git push
    

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

转到项目设置—> Hooks—>(下)预接收Hooks

< p >禁用 Cp要求在提交

在我的情况下,我的团队领导创建了一个repo(repo是空的),并将我分配为开发人员,所以当我直接推到代码以掌握错误时,我正面临! [remote rejected] master -> master (pre-receive hook declined),所以它是如何修复的,他分配给我为维护人员,这样我就可以直接将代码推到master。

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

在运行git remote add origin git@bitbucket.org:StatMarianne/<a private repo>.git之后,我运行了git push origin master,但没有用(我通常不会在git push中使用- u选项,因为我不介意在推拉时输入完整的回购和分支名称)。

错误如下:

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)应该只“添加上游(跟踪)引用…”不管怎样。

我已经按照heroku logs img https://devcenter.heroku.com/articles/buildpacks#detection-failure的指示(使用cmd: heroku logs ->显示您的错误) 然后执行cmd: "heroku buildpacks:clear"。最后,它对我有用!< / p >

我也遇到过同样的问题,这是因为我直接在主分支中推送我的代码,而我没有这个权限。所以我把我的代码推到一个新的分支中,在那之后,我创建了一个pull请求来合并master。

尽管这个问题是特定于gitlab的,但类似的错误也会发生在github上,这取决于它是如何设置的(通常是Github企业)。

您需要熟悉以下概念:

  • pre-receive钩子
  • 组织人
  • 人则

人则比其他两个更容易理解。

预接收钩子

是运行在GitHub企业服务器上的脚本 执行政策。当发生推送时,每个脚本在一个 孤立 环境< / >

.

.

.

组织人:

Webhook事件也从你的存储库发送到你的“组织Webhook”。更多信息

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

请检查JIRA状态是否在“发展中”。 对我来说,这不是,当我把jira的状态改为“发展中”时,这对我来说是有效的

请尝试:

git push -u origin 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

我在使用Bitbucket时也遇到了同样的问题。

在推送时,错误是“提交消息不匹配正则表达式”;

到达“设置”>“钩子”比;启用“另一个提交检查器”选项。

它开始工作了!!

我经历过这种情况,只是因为AWS破损。

要排除这种情况,只需检查消息是否包含类似的内容

<head><title>504 Gateway Time-out</title></head>

所以,如果你之前没有做过任何可疑的事情,只是开始看到这个-这可能只是服务器超时。

如果你正面临这样的问题

! [远程拒绝]master ->Master(预接收钩拒绝)

这是因为master是受保护的,你可以做2步

要移除保护,请遵循以下步骤-

  1. 进入项目设置。

  2. 单击Repository选项卡。

  3. 打开受保护分支。

  4. 找到你的主分支并单击Unprotect。

否则

我们可以从主分支切换到主分支

  1. git checkout -b main

  2. git branch -D master

  3. git push heroku main

黑客快乐! !

博士TL;重命名项目并复制所有更改。


我几乎试过了这一页上的所有答案。

最后,我这样做来解决这个问题:

  • 将项目重命名为project-tmp
  • 再次将项目克隆到project
  • 手动将所有更改从project-tmp移动到project(显然没有复制到__abc2文件夹)。
  • git add .
  • git commit -m 'Blah blah'
  • git push

那工作!


为什么会这样?

我的理论是,在某些提交(或某些东西)中,有一个糟糕的设置把它搞砸了。

Git LFS

另一件事,我做了,是我安装git LFS。我不确定这是否重要。

对我来说有两种可能的情况:

  1. 分支是受保护的,您没有推送的权利(请参阅您的git用户的角色)
  2. “允许强制推”在此分支上禁用,您可能正在尝试强制推。

解决方案:

  • 你需要删除.lock文件,yarn.lockpackage-lock.json文件,为了安全起见,你可以将该文件移动到另一个文件夹
  • 然后,git add .
  • git commit -m 'update'
  • git push heroku main
img1 img2

我最近在Gitlab上遇到了这个问题,上面的解决方案都不适合我。

最后,我意识到公钥是由我的同事部署到存储库上的,他已经离开了公司,他的帐户在几周后被禁用了。这导致他使用的钥匙无法使用,即使这不是他的个人钥匙。

删除密钥并重新上传相同的一个,它工作。永久解决方案是创建一个服务帐户并使用该帐户上传密钥。

引用自Gitlab 文档

所有部署密钥都关联到一个帐户。由于帐户的权限可能会更改,这可能会导致正在工作的部署密钥突然无法推送到受保护分支的情况。

对我来说,这是因为之前未完成的评论不符合某些标准。经过下面的命令,它为我工作 git重置——硬提交

.(成功的提交id在不成功的提交之前)

这对我很管用。

在最新版本的GitLab中,你可以在下面找到它:

你的GitLab项目>设置在库比;受保护的分支 一个或两个设置(允许合并/推送)设置为:开发人员+维护者或使人维护者。

https://gitlab.com/gitlab-org/gitlab-recipes/-/issues/27

我有一段时间遇到了同样的问题,在我的情况下,我在一个组中工作,克隆了存储库,但在一个单独的存储库中创建了它。发生了两件事

< p > 1。—私有创建存储库。 2.—存储库未被授予远程上传所需的权限

您可以检查是否创建了一个新的公共存储库,并更改远程存储库的路径,这样就可以测试它。

在我的情况下,因为我在一个组中工作,只需更改我的url到创建者库,就是这样,推送,它工作得很完美,我希望我能帮助你。

git remote set-url origin https://github.com// <

Git push -u origin main