Gitea 仓库无法 Push(HTTP receive-pack 返回空响应)排查清单
现象时间:2026-08-18
服务器:127.0.0.1:3000(Gitea 1.25.2),仓库**/BigData
一、现象(客户端报错)
git push 报:
send-pack: unexpected disconnect while reading sideband packet
fatal: the remote end hung up unexpectedly
二、已排查排除的项(客户端侧)
- git 版本 2.47.0.windows.2,
http.postBuffer已设 1GB,http.version=HTTP/1.1✓ - 认证正常:先 401,带 Basic 凭据重试后 200 ✓(账号
**) - 仓库写权限正常:Gitea API 返回
permissions: {admin:true, push:true, pull:true}✓ - 无分支保护规则(
branch_protections: [])✓ - 推送内容极小:1 个提交 / 3 个对象 / 1652 字节 ✓
三、核心证据(服务端问题定位)
git push过程中:POST /**/BigData.git/git-receive-pack返回 HTTP 200 但Content-Length: 0(空响应体),客户端因此判定断连。- 用 curl 直接 POST 该端点(空包)同样返回
200, 0 bytes。 - 结论:Gitea 服务端执行
git receive-pack --stateless-rpc时没有任何输出(正常服务端会返回 git 协议字节流或明确的错误包)。GET 类操作(ls-remote/clone/fetch)正常,仅写入(receive-pack)受影响。
四、服务端排查步骤(按优先级)
1. 看 Gitea 日志(最可能直接给出答案)
# 常见位置二选一
tail -200 /var/log/gitea/gitea.log | grep -iE "error|panic|receive|hook"
journalctl -u gitea --since "2026-08-18 11:2" -n 200
重点:Push 时间点(北京时间 2026-08-18 11:26 左右)附近有没有
Failed to run git receive-pack / update: hook / panic 之类的记录。
2. 检查服务器 git 环境
which git && git --version
su gitea -s /bin/bash -c 'git --version' # 确认 Gitea 运行用户能执行 git
# app.ini 里的 git 配置
grep -A5 -iE "^\[git\]" /etc/gitea/app.ini
确认 [git] 段没有指向错误的 git 路径,且 gitea 用户对仓库目录有读写权限。
3. 检查仓库钩子(hook)—— 钩子失败常导致静默空响应
# 仓库物理路径(app.ini 的 ROOT 下)
ls -la /var/lib/gitea/data/repositories/**/BigData.git/hooks/
# 逐个执行检查是否有坏钩子
for f in /var/lib/gitea/data/repositories/**/BigData.git/hooks/*; do
[ -x "$f" ] && echo "== $f ==" && head -5 "$f"
done
Gitea 在 push 时会跑 pre-receive / update 钩子;钩子脚本报错会让
receive-pack 无输出返回。必要时把可疑钩子临时移走再测一次。
4. 检查反向代理(若 3000 前面还有 nginx/caddy)
nginx -T 2>/dev/null | grep -iE "client_max_body_size|proxy_request_buffering|proxy_buffering|gzip"
client_max_body_size建议 ≥ 100m- 对
/git-receive-pack若开了proxy_buffering off+ 压缩,可能吞响应体;
可临时proxy_buffering on;对比验证 - 确认请求实际直达 Gitea(
curl -v http://127.0.0.1:3000/...与本机请求对比)
5. 磁盘 / 权限 / 配额
df -h && du -sh /var/lib/gitea/data/repositories/**/BigData.git
ls -ld /var/lib/gitea/data/repositories/**/BigData.git
磁盘满或目录不可写会令 receive-pack 静默失败。
6. 复现与验证
服务端管理员可用下面的命令直接复现(空包也应返回 git 协议数据而非 0 字节):
curl -u spark:密码 -X POST \
-H "Content-Type: application/x-git-receive-pack-request" \
-H "Accept: application/x-git-receive-pack-result" \
--data-binary "" \
"http://127.0.0.1:3000/**/BigData.git/git-receive-pack" \
-w "\nHTTP %{http_code}, body %{size_download} bytes\n"
正常 Gitea:返回 200 且有协议字节;异常:0 bytes。
7. 临时兜底
- 重启 Gitea:
systemctl restart gitea(有时是运行态异常) - 若以上都查不出,考虑升级/重装 Gitea(当前 1.25.2)
五、客户端侧临时绕过(不等服务端也能推)
SSH 端口 22 可通,管理员在 Gitea 账号 ** 下添加 SSH 公钥后,客户端可改用:
git remote add origin-ssh git@127.0.0.1:**/BigData.git
git push origin-ssh jdk17-upgrade
SSH 推送走的是 git receive-pack(SSH 通道),不受 HTTP 端点故障影响。

浙公网安备 33010602011771号