拓冰建站拓冰建站
首页 / 资讯中心 / 正文

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中运行以下两个任务Rewrite.ssh/authorized_keysfileResync 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挂载还需确认uid、gid、fmask选项允许 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),仅供参考
分享:

看完干货,该让你的企业上线了

免费需求沟通 · 48 小时内出具建站方案 · 河南本地可上门