ARTICLE · INTELLIGENCE

战地情报 · 详情页

来自尧图项目组的一线实战观察与深度解析

Gogs 二进制移动到新目录后 Git hooks 引用失效路径如何修复

Gogs 二进制移动到新目录后 Git hooks 引用失效路径如何修复 Gogs 二进制移动到新目录后 Git hooks 引用失效路径如何修复【免费下载链接】gogsThe painless way to host your own Git service项目地址: https://gitcode.com/GitHub_Trending/go/gogs当你把 Gogs 的二进制文件从原安装位置移动到新目录例如整理目录结构、迁移磁盘之后已经写入各仓库的 Git 服务端 hooks 以及 SSH 入口配置里仍然引用旧路径。这些引用指向一个已不存在的位置导致 Gogs 无法通过 SSH 正确执行pre-receive、update、post-receivehooks。Gogs 官方文档将这一现象列为 SSH 类常见问题并给出了明确的修复路径重新生成.ssh/authorized_keys文件并重新同步所有仓库的 pre-receive、update 和 post-receive hooks见 docs/asking/troubleshooting.mdx。本文只覆盖这一种情况二进制被移动后 hooks 引用了失效路径。两种操作方式管理面板、命令行二选一即可不需要同时执行。前提Gogs 实例之前可以正常工作二进制已被移动到新目录且新位置的配置custom/conf/app.ini相对二进制的位置关系已调整正确服务可以正常启动。你拥有管理员账号走管理面板路径时或者可以以运行 Gogs 的用户身份执行gogs命令走 CLI 路径时。方式一通过管理面板执行修复任务登录 Gogs进入Admin Panel/admin页面。在任务下拉框中选择并运行Rewrite.ssh/authorized_keysfile。再选择并运行Resync pre-receive, update and post-receive hooks of all repositories。这两个操作分别对应重新从数据库生成 SSH 密钥文件、重新写入所有仓库的 Git hooks。任务执行完成后页面会显示对应的成功消息英文环境下为 All public keys have been rewritten successfully. 和 All repositories pre-receive, update and post-receive hooks have been resynced successfully.。注意重写authorized_keys会用数据库中的公钥整体替换该文件文件中非 Gogs 写入的密钥会丢失。如果authorized_keys里还有你自己手工添加的其他密钥执行前先备份。方式二通过 CLI 执行不走 Web 界面如果暂时不方便登录 Web 界面例如正在迁移过程中、服务尚未恢复可以用gogs二进制自带的 admin 子命令完成同样的维护任务见 docs/advancing/cli-reference.mdx# 重新从数据库生成 .ssh/authorized_keys gogs admin rewrite-authorized-keys # 重新写入所有仓库的 pre-receive、update 和 post-receive hooks gogs admin resync-hooks每条命令都接受--config-c参数指定配置文件路径默认是custom/conf/app.ini。如果你的配置放在其他位置需要显式带上gogs admin rewrite-authorized-keys -c /path/to/your/app.ini gogs admin resync-hooks -c /path/to/your/app.ini其中-c后面替换为你的app.ini实际路径。执行时请在运行 Gogs 的用户下、以新位置的二进制执行。执行成功时终端会打印如下消息引自命令实现的成功提示见 cmd/gogs/admin.goAll public keys have been rewritten successfully All repositories pre-receive, update and post-receive hooks have been resynced successfully如何判断已修复命令行路径以上面的两条成功输出作为完成标志管理面板路径以页面显示的成功消息为准。之后通过 SSH 向仓库 push 时hooks 会以新路径被正常调用不再出现指向旧路径的失败现象。一个容易混淆的不同问题如果重写并重新同步 hooks 后push 仍然被拒绝、报! [remote rejected] master - master (hook declined)这不是路径失效问题而是 Git 无法执行 update hook 脚本——该情况的文档结论是确保系统上有bash所有 Gogs hook 脚本都依赖bash运行。这是另一条独立的排查路径不要与本文的移动二进制问题混在一起处理。相关文档问题背景与面板操作步骤docs/asking/troubleshooting.mdxSSH 一节 Incorrect binary path for update hookCLI 维护命令参考docs/advancing/cli-reference.mdx【免费下载链接】gogsThe painless way to host your own Git service项目地址: https://gitcode.com/GitHub_Trending/go/gogs创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
RELATED READING

延伸阅读

更多一线实战笔记与深度复盘,助您持续精进