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

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

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(2025 年底),之后所有安全更新均不再包含 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 里。


# php  # js  # git  # json  # composer  # github  # ai  # gitlab  # 开发环境  # pip  # default  # svn  # https  # ssh  # 移除  # 镜像  # 这是  # 也会  # 两种  # 并在  # 只会  # 这不是  # 不存在  # 要让 


相关栏目: 【 网站优化151355 】 【 网络推广146373 】 【 网络技术251813 】 【 AI营销90571


相关推荐: Swift中swift中的switch 语句  Windows Hello人脸识别突然无法使用  Laravel怎么实现微信登录_Laravel Socialite第三方登录集成  Laravel如何保护应用免受CSRF攻击?(原理和示例)  北京企业网站设计制作公司,北京铁路集团官方网站?  Swift开发中switch语句值绑定模式  如何在建站主机中优化服务器配置?  使用PHP下载CSS文件中的所有图片【几行代码即可实现】  大连企业网站制作公司,大连2025企业社保缴费网上缴费流程?  Laravel Asset编译怎么配置_Laravel Vite前端构建工具使用  如何在阿里云域名上完成建站全流程?  如何快速登录WAP自助建站平台?  Laravel如何创建自定义Facades?(详细步骤)  图片制作网站免费软件,有没有免费的网站或软件可以将图片批量转为A4大小的pdf?  Laravel如何集成Inertia.js与Vue/React?(安装配置)  中山网站推广排名,中山信息港登录入口?  Laravel怎么定时执行任务_Laravel任务调度器Schedule配置与Cron设置【教程】  如何在建站之星绑定自定义域名?  魔方云NAT建站如何实现端口转发?  Laravel如何正确地在控制器和模型之间分配逻辑_Laravel代码职责分离与架构建议  5种Android数据存储方式汇总  夸克浏览器网页跳转延迟怎么办 夸克浏览器跳转优化  作用域操作符会触发自动加载吗_php类自动加载机制与::调用【教程】  python中快速进行多个字符替换的方法小结  如何快速使用云服务器搭建个人网站?  java中使用zxing批量生成二维码立牌  制作网站软件推荐手机版,如何制作属于自己的手机网站app应用?  音乐网站服务器如何优化API响应速度?  Laravel如何升级到最新版本?(升级指南和步骤)  Laravel如何使用Eloquent ORM进行数据库操作?(CRUD示例)  开心动漫网站制作软件下载,十分开心动画为何停播?  如何制作一个表白网站视频,关于勇敢表白的小标题?  Laravel如何使用模型观察者?(Observer代码示例)  如何在腾讯云服务器快速搭建个人网站?  Laravel如何实现图片防盗链功能_Laravel中间件验证Referer来源请求【方案】  Laravel怎么创建自己的包(Package)_Laravel扩展包开发入门到发布  JS中页面与页面之间超链接跳转中文乱码问题的解决办法  Laravel Eloquent模型如何创建_Laravel ORM基础之Model创建与使用教程  手机怎么制作网站教程步骤,手机怎么做自己的网页链接?  JavaScript如何实现错误处理_try...catch如何捕获异常?  学生网站制作软件,一个12岁的学生写小说,应该去什么样的网站?  Linux安全能力提升路径_长期防护思维说明【指导】  如何用已有域名快速搭建网站?  香港服务器WordPress建站指南:SEO优化与高效部署策略  laravel怎么为应用开启和关闭维护模式_laravel应用维护模式开启与关闭方法  最好的网站制作公司,网购哪个网站口碑最好,推荐几个?谢谢?  用v-html解决Vue.js渲染中html标签不被解析的问题  如何在 React 中条件性地遍历数组并渲染元素  手机网站制作与建设方案,手机网站如何建设?  Laravel怎么实现软删除SoftDeletes_Laravel模型回收站功能与数据恢复【步骤】