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

使用TortoiseHG向本地Phabricator推送Mercurial代码报错求助

Mercurial仓库推送/拉取Phabricator失败的排查与解决

问题概述

  • 使用Workbench或TortoiseHG操作Mercurial仓库时,向Phabricator生产环境推送(push)或拉取(pull)均失败
  • 报错:HTTP Error: 500 (Error 255: abort: potentially unsafe serve --stdio invocation: ['serve', '--stdio'])
  • Git仓库无异常,仅Mercurial仓库出现该问题,已开启Diffusion的HTTP推送权限但未解决
  • 后台报错日志:
EXCEPTION: (Exception) Expected nonempty 'cmds' specification! at [<phabricator>/src/applications/diffusion/protocol/DiffusionMercurialWireProtocol.php:68]... phabricator 
c9cc3832912f9c52ec1ea1397c062cc3f8ffc659 (Oct 9 2016) arcanist
71132dbee0e2b585bdacd1481ef76eb210814139 (Oct 9 2016) phutil
dd02a0817366bf78d7e468143fbac0e42db7d7c7 (Oct 9 2016)

问题原因

该问题是旧版本Phabricator(2016年版本)与新版本Mercurial的兼容性冲突:Mercurial后续版本新增了对serve --stdio调用的安全校验机制,而旧版Phabricator的Diffusion模块未正确传递必要参数,触发了Mercurial的安全拦截,同时服务端代码因cmds参数为空抛出500错误。

解决方法

方法一:客户端临时绕过(快速生效)

在本地Mercurial配置中添加参数,跳过安全检查:

  1. 打开本地全局配置文件~/.hgrc(Windows用户为C:\Users\<用户名>\Mercurial.ini),或仓库内的.hg/hgrc文件
  2. 添加以下配置:
[phabricator]
skip-security-check = True
  1. 保存配置后,重新尝试推送/拉取操作

方法二:服务端永久修复(推荐)

  1. 升级Phabricator:将Phabricator、Arcanist、Phutil升级到2016年10月之后的版本,官方已在后续版本中修复了该兼容性问题,适配了Mercurial的安全校验逻辑。
  2. 临时代码修改(无法升级时):
    编辑服务端的<phabricator>/src/applications/diffusion/protocol/DiffusionMercurialWireProtocol.php文件,找到第68行附近的代码,确保cmds数组被正确初始化。例如,在构建Mercurial命令时,添加--config extensions.serve=参数,强制禁用Mercurial的安全检查扩展,避免触发拦截。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.02 00:57:18