packagist仅识别轻量标签且必须为vx.y.z格式,如v1.2.3;git tag v1.2.3后需git push origin v1.2.3,同时composer.json中version字段须与tag一致,私有包应删掉version并配置vcs类型仓库。

Git tag 必须是轻量标签且带 v 前缀,否则 Packagist 不识别为稳定版本。 任何用 git tag -a、不带 v、含 + 或 - 后缀的 tag,都会被跳过——不是 Composer 装不到,而是 Packagist 根本没同步进来。
怎么打一个 Packagist 能认的 tag
Packagist 只信任轻量标签(lightweight tag),且只接受严格语义化格式:v1.2.3 是合法的,1.2.3、v1.2.3-beta.1、v1.2.3+build 全部被忽略。
- 正确命令:
git tag v1.2.3(不是git tag -a v1.2.3,也不写-m) - 必须推送:
git push origin v1.2.3(只本地打 tag 没用) -
composer.json中的"version"字段必须和 tag 名完全一致(比如 tag 是v1.2.3,那"version": "v1.2.3"或"version": "1.2.3"都行;但写成"version": "1.2.4"会直接拒同步) - 私有包要特别注意:
composer.json里不该手动写version字段——删掉它,让 Packagist 完全靠 tag 推断版本
为什么 composer require vendor/name:1.2.3 找不到包
典型现象:你确认 git ls-remote --tags origin 能看到 v1.2.3,但 composer show vendor/name --all 列表里没有这个版本。这不是本地缓存或网络问题,而是 Packagist 同步链断了。
围绕关键发现、作用机制、临床相关性及研究局限性展开讨论。适用于撰写或优化任何生物医学论文的“讨论(Discussion)”部分——包括结果解读、与既往文献关联、阐释意外发现、界定研究局限性,以及撰写结论。当用户输入以下任一指令时也会自动触发该功能: - “write my discussion” - “help me discuss my findings” - “how do I compare to prior studies” - “write the limitations par
- Packagist 设置里没勾选 “Automatically update the package on new commits?”
- tag 是 annotated 类型且 message 为空(旧版 Packagist 解析失败)
- tag 名含非法字符:比如
v1.2.3-beta.1中的-和.组合在 prerelease 段允许,但+(如v1.2.3+build)一定被跳过 - 你用的是私有仓库(如 GitLab),但没配
"type": "vcs",或repositories指向错误路径
dev-main 和 v1.2.3 能不能共存
完全可以,而且应该共存。它们不是替代关系,而是不同使用场景下的并行通道:下游用户用 ^1.2 自动拉 v1.2.3,想尝鲜的人 require dev-main 直接装最新 commit。
-
dev-main不参与语义化版本计算,^和~对它完全无效 - 别在
composer.json的branch-alias里硬写"dev-main": "1.2.x-dev"来“伪装”稳定版——这只会误导依赖解析器,且 Packagist 不会把它当v1.2.3处理 - CI 流水线中,
dev-main应走--no-dev+--optimize-autoloader构建,而v1.2.3发布后应立即跑一次composer install --no-dev验证可安装性
最易被忽略的一点:tag 名和 composer.json 中的 name 必须匹配。比如 name 是 acme/utils,但你在 github.com/other-org/utils 上打了 v1.2.3,Packagist 会同步失败——它校验的是 name + tag 的组合唯一性,不是仓库地址。










