You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Shell脚本中判断仓库是否有outgoing变更并安全检测真实错误?

关于Mercurial hg outgoing退出码的可靠性分析

我来帮你梳理下这个问题——其实你观察到的行为是Mercurial全局退出码规则的一部分,虽然hg outgoing的专属文档只明确提到了0和1,但这个行为是完全可以信任的。

退出码的具体含义

Mercurial的退出码遵循一套全局规范,对应hg outgoing的场景:

  • 0:检测到有需要推送的outgoing变更集,命令执行成功且符合预期结果
  • 1:命令执行成功,但未找到任何outgoing变更集(无需要推送的内容)
  • 255:命令因致命错误终止,比如你遇到的网络中断、远程仓库不可达、权限不足等情况

文档依据

虽然hg outgoing的单独文档只提及了0和1,但Mercurial的通用退出码规则在全局帮助文档中有明确说明:

Mercurial uses three core exit code categories:

  • 0: Success (command completed as intended)
  • 1: Success but no desired outcome (e.g., no changes to commit, no outgoing changes)
  • 255: Fatal error (command failed to complete due to an error)

你可以通过运行hg help查看全局帮助信息,或者在Mercurial官方手册的通用章节找到这部分内容。

脚本编写建议

在脚本里,你可以放心通过退出码区分三种场景,示例如下:

hg outgoing -q
EXIT_CODE=$?
if [ $EXIT_CODE -eq 0 ]; then
    echo "存在需要推送的变更集"
elif [ $EXIT_CODE -eq 1 ]; then
    echo "无需要推送的变更集"
else
    echo "命令执行出错,错误码:$EXIT_CODE"
    # 此处可添加错误处理逻辑,比如重试、告警等
fi

总结

完全可以依赖hg outgoing的这个退出码行为:0对应有变更,1对应无变更,非0/1的退出码(最常见的是255)则代表真实错误。这是Mercurial长期保持的稳定规范,不会轻易变动。

内容的提问来源于stack exchange,提问作者binki

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.29 08:53:41