composer支持从私有git仓库拉取包,需在composer.json中声明vcs类型仓库、配置认证(https用Token或凭据助手,ssh用密钥),并遵循name命名规范及dev-分支/tag版本约束。

Composer 支持直接从私有 Git 仓库拉取包,无需发布到 Packagist。关键在于正确声明仓库类型、URL 和版本约束,并确保认证可用。
在 composer.json 中声明私有 VCS 仓库
在项目的 composer.json 文件中,添加 repositories 字段,指定仓库类型为 vcs,并提供 Git 地址(支持 HTTPS 或 SSH):
- HTTPS 示例(推荐配合凭证管理或 Personal access Token 使用):
“url”: “https://git.example.com/myorg/my-package.git” - SSH 示例(需本地配置好 SSH key 并能免密访问):
“url”: “git@git.example.com:myorg/my-package.git”
完整配置示例:
{ "repositories": [ { "type": "vcs", "url": "https://git.example.com/myorg/my-package.git" } ], "require": { "myorg/my-package": "dev-main" } }
确保 Composer 能访问私有仓库
HTTPS 方式需解决认证问题:
- 使用 github/gitlab 的 Personal Access Token:在 URL 中嵌入(不推荐长期使用)
“https://TOKEN:x-oauth-basic@git.example.com/myorg/my-package.git” - 更安全的做法是配置 Git 凭据助手(如
git config --global credential.helper store),让 Git 自动处理用户名密码或 token - SSH 方式依赖系统级 SSH 配置,确保运行
composer install的用户能执行git clone git@git.example.com:...成功
包的命名与版本识别规则
私有仓库中的 composer.json 必须定义 name(格式为 vendor/name),且不能与 Packagist 上已存在包名冲突。
Composer 会自动识别分支(如 main、develop)和 tag(如 v1.0.0)。使用时注意:
- 分支名前加
dev-前缀:例如"dev-main"或"dev-develop" - tag 直接写版本号:例如
"1.0.0"或"v2.1.3"(Composer 会自动忽略v前缀) - 可使用
composer show myorg/my-package --all查看所有可用版本
可选:全局配置私有仓库(避免重复声明)
若多个项目共用同一私有源,可在全局 composer.json(通常位于 ~/.composer/composer.json)中添加 repositories,这样所有项目默认继承该配置:
composer config -g repositories.myorg vcs https://git.example.com/myorg/my-package.git
之后在项目中只需 require 即可,无需再写 repositories 块。
基本上就这些。核心是声明 + 认证 + 命名规范,不复杂但容易忽略 Git 凭据或分支命名细节。