如何禁用GitHub克隆尝试,仅从Packagist下载?解决私有仓库更新失败
我正在使用一个内部仓库,该仓库连接至packagist.org。但有时运行update命令时,Composer会先尝试从GitHub克隆部分更新包,由于无法访问GitHub网络,该尝试失败并提示:
Failed to download vendor/package from dist: curl error 28 while downloading from "some.GitHub.url"
Now trying to download from source
而从GitHub下载的尝试耗时极长。我如何跳过该步骤,直接让Composer从源(我原本以为是Packagist)下载?
更新:我之前的理解有误,这里的"source"并非Packagist,它仍然尝试从GitHub的"source"克隆,因此再次失败,第二次失败提示如下:
Cloning failed using an ssh key for authentication, enter your GitHub credentials to access private repos
这是什么意思?更新Laravel必须使用GitHub SSH密钥吗?有没有办法仅通过Packagist完成更新?
1. 强制Composer优先使用dist包(跳过GitHub源克隆)
Composer中的dist指的是Packagist提供的预打包压缩包,不需要访问GitHub仓库。你可以通过以下方式强制优先使用dist:
- 单次命令使用:
若无需安装开发依赖,可添加composer update --prefer-dist--no-dev提升速度:composer update --prefer-dist --no-dev - 项目/全局持久配置:
在项目的composer.json中添加配置,永久设置优先安装dist包:
执行{ "config": { "preferred-install": "dist" } }composer config --global preferred-install dist可设置为全局生效。
2. 确认内部仓库配置正确性
确保你的内部仓库已正确同步Packagist的所有dist包资源,并且在composer.json中优先级高于GitHub:
检查项目的composer.json的repositories配置,确保内部仓库被列为优先源:
{ "repositories": [ { "type": "composer", "url": "https://你的内部仓库地址" }, { "type": "composer", "url": "https://packagist.org", "exclude": ["*/*"] } ] }
这样Composer会优先从内部仓库拉取包,仅当内部仓库无对应资源时才会访问Packagist。
3. 关于GitHub凭证提示的说明
更新Laravel不需要强制使用GitHub SSH密钥。该提示是因为Composer尝试拉取source(即Git仓库)时,网络不通导致权限验证误判,或是部分依赖包的source地址指向了私有GitHub仓库。只要你能通过内部仓库或Packagist获取到dist包,就完全不需要GitHub凭证。
4. 禁止Composer使用source源
若上述方法仍有问题,可直接禁止Composer从source安装,确保仅使用dist包:
composer update --prefer-dist --no-source
此命令下如果dist包不可用,Composer会直接报错,不会尝试去GitHub克隆。
内容的提问来源于stack exchange,提问作者pileup

