Composer 自 2.0 起彻底移除 Mercurial(Hg)支持,遇到“vcs driver not found”等错误是功能缺失所致;替代方案为通过 hg-git 插件导出为 Git 镜像,或使用 path 类型本地挂载。

Composer 本身不支持 Mercurial(Hg)仓库作为包源,composer install 或 composer update 遇到 "vcs driver not found" 或 "Could not clone hg+https://..." 错误是必然结果——这不是配置问题,而是功能缺失。
Composer 官方已移除 Hg 驱动支持
从 Composer 2.0 开始,hg VCS 驱动被彻底移除。即使你本地装了 hg 命令、在 repositories 中写 "type": "hg",Composer 也会直接忽略或报错:
Invalid repository type "hg", expected one of: composer, vcs, package, path
- Composer 1.x 最后一个支持 Hg 的版本是 1.10.22(2020 年底),之后所有安全更新均不再包含 Hg
-
composer.json中的"type": "vcs"仅支持git、svn(极有限)、perforce,不包括hg - 即使手动 patch
src/Composer/Repository/Vcs/HgDriver.php,也无法通过后续的 URL schema 校验(hg+协议不被解析)
替代方案:用 Git 包装 Hg 仓库(推荐)
Mercurial 仓库可通过 hg-git 插件导出为 Git 镜像,再让 Composer 拉取该 Git 地址。这是目前最稳定、无需改 Composer 源码的方式:
- 在 Hg 仓库所在机器上启用
hg-git:pip install hg-git,并在~/.hgrc中启用插件 - 进入 Hg 仓库,执行:
hg bookmark -r default master(确保有master分支) - 运行:
hg push git+ssh://git@example.com/repo.git或推到 GitHub/GitLab 的空 Git 仓库 - 在
composer.json中声明为标准 Git VCS:
{
"repositories": [{
"type": "vcs",
"url": "https://github.com/user/repo.git"
}]
}
注意:每次 Hg 更新后需重新 hg push git+... 同步,不能全自动。
临时绕过:用 path 类型 + 本地 Hg 克隆
若仅用于开发环境且 Hg 仓库可访问,跳过 VCS 驱动,改用 path 类型直接挂载本地路径:
- 先手动执行:
hg clone https://example.com/repo.git /tmp/my-hg-package - 在
composer.json中写:
{
"repositories": [{
"type": "package",
"package": {
"name": "vendor/package",
"version": "dev-main",
"dist": {
"url": "/tmp/my-hg-package",
"type": "path"
},
"autoload": { "psr-4": { "Vendor\\Package\\": "src/" } }
}
}]
}
⚠️ 此方式不适用于 CI/CD:路径不存在会失败;dist.type: "path" 不触发自动更新,修改 Hg 仓库后必须手动 rm -rf vendor/vendor/package && composer install。
真正要让 Composer “支持 Hg”,本质是推动它重加驱动——但官方明确表示无计划恢复。实际项目中,要么迁移到 Git,要么用上面两种折中方式;把 Hg 当主力而强求 Composer 原生集成,只会卡在不可维护的 hack 里。










