AI Native 手册
坑库

网络报错先查远端

超时和 503 只说明“结果未知”,不说明“失败”。防止盲目重试造成重复推送、重复打 tag

亲历产品组织阶段 · 发布更新于 2026-10-16
分享到 X
一句话规则

网络类状态变更失败后,先确认远端真实状态,再决定重试还是放弃

发生了什么

一次发版,push 和打 tag 连着遇到 503 超时。看到报错就重试,重试又超时,接着再试。

等网络恢复后对账才发现:有的请求其实已经在远端生效,只是响应没有回来。盲目重试的结果,是重复推送和重复打 tag。

为什么会这样

超时和 503 的真实含义是“结果未知”。请求可能根本没到,也可能服务端已经处理完,只是响应在网关或网络上丢了。

重推同一个 ref 往往无害,但发版流程里有不少动作不是幂等的:脚本按“最新版本号加一”算出新 tag,调用 API 新建 release,tag 一推上去就触发发布流水线。agent 在这里尤其容易出事:看到报错,第一反应是重试,或者换个办法绕过去,比如换个 tag 名、加 --force。

怎么做

先查远端,再决定。分支、tag、release、流水线各有查法:

git ls-remote origin refs/heads/main    # 远端分支指向哪个提交,和 git rev-parse HEAD 对比
git ls-remote origin refs/tags/v1.4.2   # 远端有没有这个 tag
gh release view v1.4.2                  # release 建了没有
gh run list --limit 5                   # 发布流水线是不是已经跑起来了

按结果分三条路。加上 --exit-code,“没找到”和“连不上”的退出码就不一样了:

tag=v1.4.2
git ls-remote --exit-code origin "refs/tags/$tag" >/dev/null
case $? in
  0) echo "远端已有 $tag,不要重试" ;;
  2) echo "远端没有 $tag,用同一个名字重推" ;;
  *) echo "远端也查不到,等网络恢复,什么都别动" ;;
esac

写进 CLAUDE.md 和子 agent 提示词:网络类状态变更(push、打 tag、建 release、部署)失败后,先查远端;不许换名重试,不许用 --force 绕过。

相关

本页目录