Composer配置vcs仓库必须设"type":"vcs"且"url"以.git结尾,包名须与仓库composer.json中"name"完全一致;dev-分支名需真实存在,认证需通过auth.json或global config配置对应token。

composer.json里配置vcs仓库必须写对type和url格式
私有 Git 仓库不能直接用 HTTPS 或 SSH 地址当包名,必须显式声明为 vcs 类型源。否则 Composer 会跳过它,继续去 Packagist 找包,最终报 Could not find package vendor/name。
正确写法是:
{
"repositories": [
{
"type": "vcs",
"url": "https://github.com/your-org/your-private-package.git"
}
],
"require": {
"your-org/your-private-package": "dev-main"
}
}注意三点:
-
url必须以.git结尾,否则 Composer 无法识别为 Git 仓库 - 包名
your-org/your-private-package必须和仓库根目录下composer.json里的"name"字段完全一致(包括大小写) - 如果用 SSH,
url写成git@github.com:your-org/your-private-package.git,需提前配好 SSH key,且ssh -T git@github.com能通
拉 dev 分支要加 dev- 前缀,但分支名必须真实存在
dev-main、dev-10.x、dev-feature/login 都合法,前提是远程仓库真有这个分支。GitHub 默认分支叫 main,不是 master,写 dev-master 就会 404。
常见错误现象:
- 报错
Could not find branch dev-main:实际分支叫main,但远程没设dev-main别名,此时应直接写main(不加dev-) - 报错
No driver found for xxx.git:url 写成了https://github.com/xxx/yyy#main这种带 fragment 的地址——create-project不支持 URL 作为包名,只认vendor/name格式 - 分支名大小写敏感:
Dev-Main≠dev-main,GitHub 上它们是两个分支
认证失败时优先检查 auth.json 和 token 权限
私有仓库返回 403 或 Could not fetch https://api.bitbucket.org/,大概率是认证没走通,不是配置写错了。
工作流任务拆解与模型编排技能。使用场景:(1) 收到复杂工作任务需要拆解为可执行步骤,(2) 需要为不同步骤选择最合适的模型,(3) 需要跟踪工作流进度和模型使用情况,(4) 长时间任务卡住需要问题诊断和解决方案。
Bitbucket/GitHub/GitLab 各有要求:
- GitHub:用 Personal Access Token,scope 至少含
repo;配置命令是composer config --global github-oauth.github.com <token> - GitLab:同样用 PAT,配置为
composer config --global gitlab-oauth.gitlab.com <token> - Bitbucket:必须用 App Password(不是 API token),且权限勾选
Repositories: Read;配置方式是往auth.json里手动写{"bitbucket.org": {"consumer_key": "...", "consumer_secret": "..."}},官方不支持composer config --global直接设
验证是否生效:运行 composer diagnose,看输出里有没有 Authentication configured 提示。
拉到分支但装的不是最新提交?检查 composer.lock 和 require 版本约束
即使指定了 dev-main,composer install 仍可能装旧版,因为 composer.lock 锁定了上次解析出的 commit hash,或者 require 里写了 "laravel/framework": "^10.0" 这类约束,压制了分支更新。
解决方法分场景:
- 想强制重拉最新
main:删掉composer.lock+vendor/,再跑composer install --prefer-source(--prefer-source确保克隆 Git,不是下 zip) - 只想更新某一个私有包:用
composer update your-org/your-private-package --with-dependencies - require 中版本写死导致冲突:把
"your-org/your-private-package": "dev-main"改成"your-org/your-private-package": "dev-main as 1.0.99",用as别名绕过语义化版本校验
真正容易被忽略的是:私有仓库自己的 composer.json 里如果没写 "version" 字段,Composer 会 fallback 到分支名或 commit hash 推断版本,某些 CI 场景下会导致 autoload 失效或依赖解析异常。

















