gogs设置Git钩子post-receive报:Fail to execute custom post-receive hook

在gogs中给仓库设置git钩子要实现项目自动部署,但是钩子设置后没有起作用,查看gogs中的post-receive的log文件,显示:

cat  /home/gogs/log/hooks/post-receive.log 
2020/04/14 14:17:40 [FATAL] [...its/gogs/cmd/hook.go:274 runHookPostReceive()] Fail to execute custom post-receive hook: exit status 128
2020/04/14 14:24:12 [FATAL] [...its/gogs/cmd/hook.go:274 runHookPostReceive()] Fail to execute custom post-receive hook: exit status 1
2020/04/14 14:31:24 [FATAL] [...its/gogs/cmd/hook.go:274 runHookPostReceive()] Fail to execute custom post-receive hook: exit status 1

post-receive钩子文件内容如下:

#!/bin/bash
unset $(git rev-parse --local-env-vars);
cd /home/demo/
git pull origin master 

翻看gogs的issues后发现其中有人给出将钩子中的第一行做修改后即可正常运行,原因未知,修改后的文件如下:

#!/usr/bin/env bash
unset $(git rev-parse --local-env-vars);
cd /home/demo/
git pull origin master 

issues地址:https://github.com/gogs/gogs/issues/5076

<think>好的,用户现在遇到了Git推送时的错误,之前已经提供过解决方案,现在用户提供了具体的日志信息,需要进一步分析。首先,用户执行了带有详细日志的命令`GIT_TRACE=1 GIT_CURL_VERBOSE=1 git push -v origin master`,输出了错误信息,显示内部错误,无法读取远程仓库,提示检查权限和仓库是否存在。 首先,我需要分析用户提供的日志。日志中显示使用的是SSH协议,尝试连接到`git@192.168.40.190`,并执行`git-receive-pack`命令。错误是“Gogs: Internal error”,然后是常见的权限或仓库存在的提示。这可能意味着SSH连接成功,但服务器端处理请求时出错。 接下来,按照之前的解决方案框架,我需要逐步排查可能的因素。首先,检查远程地址是否正确。用户使用的是`192.168.40.190:wufanfan/MVS2ITEK.git`,看起来是SSH格式,但正确的SSH格式应该是`git@192.168.40.190:wufanfan/MVS2ITEK.git`。不过用户的日志中显示命令已经正确使用了`git@192.168.40.190`,所以地址可能没问题。 接下来检查SSH密钥。用户能够发起连接,说明SSH配置可能正确,但需要确认公钥是否添加到Gogs账户,并且权限正确。可能需要用户检查`~/.ssh/id_rsa.pub`是否在Gogs的SSH设置中,并确认文件权限是否为600。 然后,检查仓库是否存在。用户需要访问`http://192.168.40.190/wufanfan/MVS2ITEK`确认仓库是否存在。如果不存在,需要创建。此外,可能服务器端仓库权限问题,比如Gogs服务账户是否有权访问该仓库目录,或者目录权限是否正确。 另外,查看日志中的Gogs内部错误,可能需要检查服务器端日志。用户可能需要联系管理员查看Gogs的日志文件,通常在`/var/log/gogs/gogs.log`,寻找更具体的错误信息。 网络问题方面,用户已经能连接到服务器,所以可能不是网络问题,但可以建议检查防火墙或SSH端口是否开放。不过日志显示连接已建立,因此问题更可能出在服务器端处理请求时。 总结下来,可能的解决步骤包括:确认仓库存在,检查SSH密钥配置,检查服务器端权限和日志。需要将这些步骤清晰地传达给用户,并建议他们逐步排查,特别是检查仓库是否存在和服务器日志。</think>以下是针对你提供的错误日志的详细分析及解决方案: --- ### **错误日志关键信息解读** ```bash Pushing to 192.168.40.190:wufanfan/MVS2ITEK.git trace: run_command: ssh git@192.168.40.190 'git-receive-pack '\''wufanfan/MVS2ITEK.git'\''' Gogs: Internal error fatal: Could not read from remote repository. ``` - **关键点1**:使用 SSH 协议推送至 `192.168.40.190:wufanfan/MVS2ITEK.git` - **关键点2**:已建立 SSH 连接,但服务器返回 `Gogs: Internal error` - **核心问题**:SSH 连接成功,但 Gogs 服务端处理请求失败(可能是仓库权限、服务端配置或仓库路径问题)。 --- ### **分步解决方案** #### **1. 确认仓库路径是否存在** - **访问 Gogs 网页端** 浏览器直接打开仓库 URL: ``` http://192.168.40.190/wufanfan/MVS2ITEK ``` - 若显示 `404`,说明仓库不存在 → 需在 Gogs 网页端手动创建同名仓库 - 若仓库存在,检查仓库路径大小写是否一致(Gogs 区分大小写)。 #### **2. 验证 SSH 密钥权限** - **检查公钥是否绑定到 Gogs 账户** 1. 打开本地公钥文件: ```bash cat ~/.ssh/id_rsa.pub ``` 2. 登录 Gogs 网页端 → **用户设置** → **SSH 密钥** → 确认公钥已添加。 - **检查私钥文件权限** 运行以下命令修复权限: ```bash chmod 700 ~/.ssh chmod 600 ~/.ssh/id_rsa ``` #### **3. 手动测试 SSH 连接** ```bash ssh -Tv git@192.168.40.190 ``` - **预期成功输出**: ``` Hi wufanfan! You've successfully authenticated. ``` - **若失败**: - 检查 SSH 服务是否在 `192.168.40.190` 运行(默认端口 22): ```bash telnet 192.168.40.190 22 ``` #### **4. 检查 Gogs 服务端仓库权限** - **登录服务器检查仓库目录** 仓库路径通常为: ```bash /home/git/gogs-repositories/wufanfan/MVS2ITEK.git ``` 1. 确认目录存在: ```bash ls -l /home/git/gogs-repositories/wufanfan/MVS2ITEK.git ``` 2. 修复权限(Gogs 默认用户为 `git`): ```bash chown -R git:git /home/git/gogs-repositories/wufanfan chmod -R 750 /home/git/gogs-repositories/wufanfan ``` #### **5. 查看 Gogs 服务端日志** - **登录服务器查看日志** 默认日志路径: ```bash tail -f /var/log/gogs/gogs.log ``` - **常见错误**: - `Repository does not exist` → 仓库路径错误 - `Permission denied` → 文件系统权限问题 - `Failed to execute git command` → Git 版本不兼容 #### **6. 尝试使用 HTTP 协议临时测试** ```bash git remote set-url origin http://192.168.40.190/wufanfan/MVS2ITEK.git git push -u origin master ``` - 若 HTTP 协议成功,说明 SSH 配置有问题; - 若 HTTP 同样失败,说明服务端仓库或权限问题。 --- ### **附:快速检查脚本** ```bash # 1. 检查仓库是否存在 curl -I http://192.168.40.190/wufanfan/MVS2ITEK # 2. 检查 SSH 连接 ssh -T git@192.168.40.190 # 3. 检查本地仓库配置 git remote -v cat .git/config ``` --- ### **总结** - **若仓库存在且权限正确** → 联系管理员检查 Gogs 服务端日志; - **若仓库不存在** → 在 Gogs 网页端手动创建; - **若 SSH 密钥错误** → 重新生成并绑定密钥。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值