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

Git push error pre-receive hook declined

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

[remote rejected] master -> master (pre-receive hook declined)

附加信息:

1) 我还没有通过电子邮件激活 link 激活用户(项目所有者),因为我还没有在服务器端配置 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 总是空的。也许问题出在这里......如果是这样,请给我有关如何解决该问题的建议。谢谢

您需要将您的 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/ 中的部分 Protecting your code 为什么)。如果您的情况是这样,那么这会有所帮助:

Open your project > Settings > Repository and go to "Protected branches", find "master" branch into the list and click "Unprotect" and try again.

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

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

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

可能并非如此,但这是我的“pre-receive hook declined”错误的解决方案:

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

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

Following resolved problem in my local machine:

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

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

C。如果您使用了错误的帐户,只需切换您的帐户凭据(username/password/SSH 键)并再次尝试推送。

D.否则,如果您的本地配置不正确,您将需要修改它

For 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
    

我通过在 .git/config

中将 remote 'origin' urlhttp 更改为 git 协议解决了这个问题

转到项目设置 --> 挂钩 -->(下)Pre-receive 挂钩

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

就我而言,我的团队领导创建了一个回购协议(回购协议为空)并将我指定为 开发人员 所以当我直接推送代码以掌握错误时,我是面对 ! [remote rejected] master -> master (pre-receive hook declined) 所以他分配给我作为 maintainer 是如何解决的,所以我能够将代码直接推送给 master。

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

运行git remote add origin git@bitbucket.org:StatMarianne/<a private repo>.git后,我运行git push origin master无用(我一般不用-u 选项 git push 因为我不介意在推拉时输入完整的 repo 和 b运行ch 名称)。

错误读取:

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 的说明)时,我的本地 b运行ch 确实被成功推送了。

我觉得很奇怪,因为 -u (--set-upstream) 无论如何应该只 "add upstream (tracking) reference..."。

我已经按照 heroku 日志的说明进行操作 img https://devcenter.heroku.com/articles/buildpacks#detection-failure(使用 cmd:heroku 日志 -> 显示您的错误) 然后执行命令:"heroku buildpacks:clear"。终于,它对我有用!

我遇到了同样的问题,这是因为我直接在master分支中推送我的代码,我没有权限。所以我将我的代码推送到一个新的分支中,然后我创建了一个 pull request 以与 master 合并。

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

您需要熟悉以下概念:

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

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

预接收挂钩

are scripts that run on the GitHub Enterprise server to enforce policy. When a push occurs, each script runs in an isolated environment to determine whether the push is accepted or rejected.

组织网络挂钩:

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

这些是在您的 github 企业中设置的。它们特定于 github 企业 的版本。 由于您的访问限制(开发人员、维护人员、管理员等),您可能看不到任何人。

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

请尝试:

git push -u origin master

如果仍然无法推送成功,请创建一个新分支或选择其他分支并在新分支上推送

这是因为Master分支被保护了,这里是清除这个错误的步骤。

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

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

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

已转到 'Settings' > 'Hooks' > 启用 'Yet another commit checker' 选项。

它开始工作了!!

我曾因为 AWS 损坏而经历过这种情况。

要排除这种情况,只需检查邮件是否包含类似于

的内容

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

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

如果您遇到类似

的问题

! [远程拒绝] master -> master (pre-receive hook declined)

因为master被保护了,你可以做2步

要取消保护,请按照以下步骤操作 –

  1. 转到项目设置。

  2. 单击存储库选项卡。

  3. 打开受保护的分支。

  4. 找到您的 master 分支并单击取消保护。

否则

我们可以将分支从 master 切换到 main

  1. git checkout -b main

  2. git branch -D master

  3. git push heroku main

愉快的黑客攻击!!!

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


我几乎尝试了此页面上的所有答案。

最后我通过这样做修复了它:

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

成功了!


为什么这有效?

我的理论是,在某个提交(或某事)的某处有一个糟糕的设置搞砸了。

Git LFS

我做的另一件事是 setup git lfs。我不确定这是否重要。

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

  1. 分支被保护,您无权推送(查看您的git用户的角色)
  2. 允许强制推送在该分支上被禁用,您可能正在尝试强制推送。