--repository-url 不生效是因为它只替换元数据源,不参与包发现;真正使用 git 源需同时满足:在 repositories 中声明 vcs 类型源(含 "packagist.org": false)且 require 中包名与仓库 composer.json 的 name 完全一致。

composer require --repository-url 为什么总是不生效
因为 --repository-url 只替换元数据源(即 packages.json),不参与包发现逻辑。Composer 仍会拿着你写的包名去那个 URL 查版本列表,如果该镜像里压根没这个包(比如私有库、未同步的 dev 分支),它就 fallback 到 packagist.org 或直接报 Could not find package。
常见错误写法:composer require myorg/private:dev-main --repository-url https://git.example.com/myorg/private.git → 必然失败。
- 它不会自动把 Git URL 当作 VCS 源去 clone
- 也不会检查该仓库根目录有没有
composer.json - 更不会校验其中
"name"字段是否匹配myorg/private
真正让某个包走 Git 源的两步法
必须同时满足两个条件:在 repositories 中声明源 + 在 require 中显式写包名和版本。缺一不可。
-
repositories数组开头加{"packagist.org": false},否则默认源优先匹配,你的源根本没机会被查 - VCS 仓库条目
type必须是"vcs",不能是"composer"或漏写 -
url必须是可git clone的地址,如https://github.com/vendor/name.git或git@github.com:vendor/name.git,不能是网页链接 -
require中的包名必须与 Git 仓库内composer.json的"name"字段**完全一致**(大小写敏感) - 版本写法要合规:用
dev-main表示分支最新,v1.2.0表示 tag,dev-main#abc1234表示指定 commit
装 commit ID 必须绕过 require 命令
composer require vendor/name:abc1234 会报 Invalid version string —— Composer 版本解析器根本不认纯哈希。
围绕关键发现、作用机制、临床相关性及研究局限性展开讨论。适用于撰写或优化任何生物医学论文的“讨论(Discussion)”部分——包括结果解读、与既往文献关联、阐释意外发现、界定研究局限性,以及撰写结论。当用户输入以下任一指令时也会自动触发该功能: - “write my discussion” - “help me discuss my findings” - “how do I compare to prior studies” - “write the limitations par
正确做法只有两种:
- 手动改
composer.json:"require": {"vendor/name": "dev-main#abc1234"},再运行composer update vendor/name - 或先执行
composer require vendor/name:dev-main,再进vendor/vendor/name目录手动git reset --hard abc1234,最后composer dump-autoload
注意:dev-main#abc1234 中的 main 是占位分支名,但不可省略;哈希必须已在远程存在且属于该分支历史。
private repo 安装失败的静默原因
很多情况不报错,只是跳过你的仓库、悄悄回退到 packagist.org,最终装错包或装空目录。
- Git 仓库根目录没有
composer.json,或其中"name"字段拼错/大小写不对 -
repositories写成对象{}而非数组[],导致只生效最后一个条目 - 多个 VCS 源时顺序错了:Composer 匹配到第一个同名包就停,不会继续往后找
- 没设
"minimum-stability": "dev"且"prefer-stable": false,导致dev-main类版本被过滤 - 用 HTTPS 访问私有 GitLab/GitHub 时没配 token,或 SSH 密钥没加载进 ssh-agent,
git clone实际失败但 Composer 不提示
最可靠的验证方式不是看 composer show,而是进 vendor/ 对应目录执行 git log -n1,确认 commit hash 和你预期的一致。










