Composer怎么配置Hg仓库 支持Mercurial版本控制【进阶】

13次阅读

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

Composer怎么配置Hg仓库 支持Mercurial版本控制【进阶】

Composer 本身不支持 Mercurial(Hg)仓库作为包源,composer installcomposer 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" 仅支持 gitsvn(极有限)、perforce,不包括 hg
  • 即使手动 patch src/Composer/Repository/Vcs/HgDriver.php,也无法通过后续的 URL schema 校验(hg+ 协议不被解析)

替代方案:用 Git 包装 Hg 仓库(推荐)

Mercurial 仓库可通过 hg-git 插件导出为 Git 镜像,再让 Composer 拉取该 Git 地址。这是目前最稳定、无需改 Composer 源码的方式:

  • 在 Hg 仓库所在机器上启用 hg-gitpip 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 里。

text=ZqhQzanResources