必须配置ssh密钥并使用ssh url格式:生成ed25519密钥、添加至github、在composer.json repositories中声明ssh地址、require时指定dev分支,ci环境需用ssh-agent或环境变量注入token。

Composer安装GitHub私有仓库前必须配置SSH密钥
Composer默认走HTTPS协议拉取GitHub仓库,但私有库在HTTPS下会卡在认证环节——它不会弹出密码框,也不会读取git config --global credential.helper,直接报错Could not fetch https://github.com/xxx/yyy, enter your GitHub credentials或更隐蔽的401 Unauthorized。根本解法是切到SSH协议,并确保本地SSH密钥已添加到GitHub账户。
实操建议:
- 运行
ssh-keygen -t ed25519 -C "your_email@example.com"生成密钥(不设密码则后续无需交互) - 用
cat ~/.ssh/id_ed25519.pub复制公钥,粘贴进GitHub Settings → SSH and GPG keys - 测试连通性:
ssh -T git@github.com,看到Hi xxx! You've successfully authenticated...才算通过 - 确认
git@github.com:owner/repo.git能被git clone成功,Composer才可能成功
require时必须用SSH URL格式,不能用HTTPS或GitHub网页地址
即使SSH密钥已配好,如果composer.json里写的是"vendor/package": "dev-main"且没声明仓库源,Composer仍会尝试从Packagist找包——而私有库显然不在那里。必须显式声明仓库类型和URL,且URL必须是SSH格式。
实操建议:
- 在
composer.json的repositories段加一条:{ "type": "vcs", "url": "git@github.com:your-org/private-package.git" } -
require字段中版本必须对应Git分支或tag,例如"your-org/private-package": "dev-main"或"dev-develop";不能写"*"或"^1.0"(Composer无法自动解析私有库的版本约束) - 避免使用
https://github.com/your-org/private-package.git——哪怕配了GitHub token,也容易因token权限不足或过期失败
遇到“Failed to extract”或“Could not clone”先检查Git子模块和钩子
私有仓库若含Git子模块、pre-commit钩子或自定义composer.json中的scripts,Composer install时可能静默失败。错误常表现为Failed to extract vendor/package: unable to create directory或卡在Cloning into '/tmp/...'后退出。
工作流任务拆解与模型编排技能。使用场景:(1) 收到复杂工作任务需要拆解为可执行步骤,(2) 需要为不同步骤选择最合适的模型,(3) 需要跟踪工作流进度和模型使用情况,(4) 长时间任务卡住需要问题诊断和解决方案。
实操建议:
- 临时禁用Git钩子:在
composer.json的config段加"git-hooks": false - 确认子模块已推送且权限开放——私有子模块需单独配置SSH密钥并添加到GitHub,否则主包能克隆,子模块会404
- 用
composer install -v看详细日志,重点捕获Executing command (/tmp/...): git clone --no-checkout ...这一行,手动执行它验证是否真能克隆 - 若项目根目录有
.git且是GitHub私有库,Composer可能误判为“开发模式”,导致跳过某些下载逻辑;可加"minimum-stability": "stable"强制按稳定版处理
CI/CD环境要预置SSH密钥或用GitHub Token替代
本地能跑不代表CI能跑。GitHub Actions、GitLab CI等环境默认无SSH代理,也无用户交互输入密码的可能。硬编码密码或token到composer.json极不安全,必须用环境变量注入。
实操建议:
- GitHub Actions中,用
webfactory/ssh-agentAction加载部署密钥,再运行composer install - 若必须用HTTPS(如某些企业防火墙禁SSH),创建GitHub Personal Access Token,权限至少勾选
repo,然后在CI中设置环境变量GITHUB_TOKEN,并在composer.json的repositoriesURL里写成https://${GITHUB_TOKEN}@github.com/owner/repo.git(注意:需在CI脚本中用sed或jq动态注入,不可硬编码) - 避免在
auth.json里存token——它可能被意外提交或日志泄露;优先走环境变量+composer config github-oauth.github.com ${TOKEN}命令式配置
私有仓库安装最常卡在「以为配了token就万事大吉」,其实SSH密钥链、Git子模块、CI环境隔离这三环只要断一环,就会静默失败。多看-v输出里那条真实的git clone命令,把它单独拎出来跑一遍,比查十篇文档都管用。










