最近在迁移gogs数据至mysql数据库,在push代码时报错了,如下:

Enumerating objects: 5, done.
Counting objects: 100% (5/5), done.
Delta compression using up to 12 threads
Compressing objects: 100% (3/3), done.
Writing objects: 100% (3/3), 393 bytes | 393.00 KiB/s, done.
Total 3 (delta 1), reused 0 (delta 0)
remote: hooks/pre-receive: line 2: /app/gogs/gogs: No such file or directory
To https://xxx.xxx.xxx/xxx/WebGIS.git
 ! [remote rejected] master -> master (pre-receive hook declined)
error: failed to push some refs to 'https://xxx.xxx.xxx/xxx/WebGIS.git'

错误截图

我去检查仓库下hooks文件夹下的 pre-receive 的内容,发现路径/app/gogs/gogs是错误的,于是修改错误的路径为迁移后gogs的目录,再测试push一次,竟然成功push。

#!/usr/bin/env bash
"/app/gogs/gogs" hook --config='/data/gogs/conf/app.ini' pre-receive

但是几十个仓库这样改岂不是浪费时间又浪费精力的,于是上网搜索了相关内容,在 https://www.jianshu.com/p/5069340568fc 找到了解决方法:

使用管理员账号登录gogs,单击头像,选择 管理面板 ,如下图,单击 执行 重新同步所有仓库的 pre-receive、update 和 post-receive 钩子即可。

Gogs控制面板

再去看仓库下hooks文件夹下的钩子文件,里面的路径已经换成最新的了,push也没有问题。