news 2026/9/10 9:54:41

Gogs push 报 “remote rejected: hook declined“ 怎么处理

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
Gogs push 报 “remote rejected: hook declined“ 怎么处理

Gogs push 报 "remote rejected: hook declined" 怎么处理

【免费下载链接】gogsThe painless way to host your own Git service项目地址: https://gitcode.com/GitHub_Trending/go/gogs

当你通过 SSH 向自建的 Gogs 服务器推送代码时,如果客户端出现类似下面的拒绝信息:

! [remote rejected] master -> master (hook declined)

说明推送请求到达了服务器,但 Git 在更新引用前执行的服务端 hook 脚本没有跑起来,服务器因此拒绝了整个 push。Gogs 的 故障排查文档 针对这个报错给出的可能原因是:Git 无法执行 update hook 脚本。由于所有 Gogs hook 脚本都依赖bash运行,排查从这一点开始。

先理解一下机制:从 CLI 参考 和源码 cmd/gogs/hook.go 可以看到,仓库里的 pre-receive / update / post-receive hook 本质上会把处理委托给gogs hook子命令,hook命令由 SSH 和 Git 子系统内部调用。所以这个报错只涉及两类条件:脚本能否被解释器执行(需要bash)、以及 hook 里引用的 Gogs 路径是否仍然有效。

检查一:服务器上是否有可用的 bash

这是排查文档针对hook declined列出的首选原因与解决方案:

  • 可能原因:Git 无法执行 update hook 脚本;
  • 解决方案:确保系统上有可用的bashshell,所有 Gogs hook 脚本都需要bash才能运行。

在运行 Gogs 的服务器上确认 SSH 会话的执行环境里能够找到bash。如果系统里没有安装bash(或它不在 hook 执行环境可用的位置),需要先安装并使其可用,再重新执行同一次 push。这一步不需要修改 Gogs 的任何配置,也不需要重启服务——hook 脚本是每次 push 时现场执行的。

检查二:Gogs 二进制被移动过,hook 引用了旧路径

如果bash确认可用,问题仍然存在,检查你是否把 Gogs 二进制文件移动到了与原安装位置不同的地方。排查文档中"Incorrect binary path for update hook"条目指出:移动二进制后,仓库内的 Git hooks 会继续引用旧路径,导致脚本失效。

文档给出的解决方案是在管理面板/admin)中运行以下两个任务:

  1. Rewrite.ssh/authorized_keysfile
  2. Resync pre-receive, update and post-receive hooks of all repositories

第二个任务对应的命令行入口(见 CLI 参考):

gogs admin resync-hooks

该命令会重新为所有仓库写入 Git 服务端 hooks。所有gogs命令都接受--config-c)参数指定自定义配置文件路径,默认是custom/conf/app.ini;如果你的实例配置不在默认位置,需要显式带上,例如gogs admin resync-hooks -c /path/to/app.ini/path/to/app.ini替换为你的实际配置路径)。

注意:按排查文档的方案同时执行第 1 个任务(重写authorized_keys)时,CLI 参考中有一个明确警告——rewrite-authorized-keys整体替换authorized_keys文件,其中非 Gogs 添加的密钥会丢失。执行前确认该文件中没有你依赖的第三方密钥,或只执行与 hook 相关的第 2 个任务。

验证结果

  • resync-hooks执行成功时,输出为:

    All repositories' pre-receive, update and post-receive hooks have been resynced successfully
  • 回到客户端重新执行原来的 push:不再出现(hook declined)拒绝,引用正常更新,即为恢复。

相关但不同的症状

同一份排查文档还有两条容易混淆、但不要按 hook declined 处理的条目:

  • push 成功但 dashboard 时间线不更新:多见于仓库存放在挂载设备上,hook 脚本因挂载点设为noexec而无法执行。文档建议用mount检查挂载选项,必要时在/etc/fstab中为该挂载点加上exec选项;vfat(以及可能的cifs)挂载还需确认uidgidfmask选项允许 Gogs 用户执行文件。
  • SSH push 挂起 60 秒:Gogs 在每次 SSH push 后会向自己的 Web 服务发回一次 HTTP 请求,若服务器防火墙或网络策略阻断了这条回环连接,请求会一直挂起直到超时。需要确认服务器能在配置的 HTTP 端口访问到自身。

这两条现象的判断和修复都直接以上述文档原文为准,参见 docs/asking/troubleshooting.mdx。

【免费下载链接】gogsThe painless way to host your own Git service项目地址: https://gitcode.com/GitHub_Trending/go/gogs

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/9/10 9:54:05

深蓝AI智能名片小程序:可部署的轻量级CRM+AI识别系统

简介:深蓝AI智能名片小程序1.7.1安装更新一体包,面向微信小程序开发者及企业数字化工具实践者,解决传统商务名片管理低效、信息录入繁琐、客户关系沉淀困难等痛点,适用于销售团队、初创公司及IT技术团队快速部署智能化名片服务。资…

作者头像 李华
网站建设 2026/9/10 9:50:26

Windows共享打印机连接失败怎么排查?先查主机共享再处理客户端接入

共享打印机连不上的问题,在办公网络里出现频率很高。排查时最好固定顺序:先看接入打印机的这台主机能不能正常打印,再看另一台设备是卡在“找不到共享主机”,还是卡在驱动安装,或是发送任务后没有反应。主机侧如果队列…

作者头像 李华
网站建设 2026/9/10 9:47:22

一人企业方法论指南:从副业到稳定被动收入的实践路径

一人企业方法论指南:从副业到稳定被动收入的实践路径 【免费下载链接】opc-methodology 《一人企业方法论》第二版,也适合做其他副业(比如自媒体、电商、数字商品)的非技术人群。 项目地址: https://gitcode.com/GitHub_Trendin…

作者头像 李华
网站建设 2026/9/10 9:46:56

无线传感器网络LEACH协议Matlab仿真与优化

1. 无线传感器网络路由协议概述无线传感器网络(WSN)作为物联网的基础设施之一,其路由协议的设计直接影响着网络性能和能耗效率。在众多路由协议中,LEACH(Low-Energy Adaptive Clustering Hierarchy)因其简单…

作者头像 李华