Packagist 通过 GitHub webhook 自动同步公开仓库的合法 Git tag(如 v1.2.0),要求 composer.json 在根目录且 name 字段与注册一致;修改后需打新 tag 并确保 webhook 活跃,否则需手动点击 Update。

怎么让 Packagist 自动同步你的 GitHub 仓库更新
Packagist 不是手动上传平台,它靠自动抓取你配置好的源码仓库(比如 GitHub)来更新包。关键不是“去 Packagist 后台点按钮”,而是让你的仓库具备可被识别和拉取的条件。
常见错误现象:Package not found、Could not fetch package info,或者新 tag 推上去后 Packagist 页面迟迟不更新。
- 确保
composer.json在仓库根目录,且name字段格式为vendor/name(如myorg/my-package),和你在 Packagist 注册时填的一致 - GitHub 仓库必须是公开的;私有仓库即使加了 webhook 也不会被 Packagist 抓取
- 每次发版必须打 Git tag,格式要合法(如
v1.2.0或1.2.0),Packagist 只认 tag,不认 branch(main或dev-master是特殊 fallback,不稳定) - 在 Packagist 页面点击 “Update” 按钮前,先确认 GitHub 仓库的 webhook 已启用:进入 GitHub → Settings → Webhooks → 确保有指向
https://packagist.org/api/github的 active hook
为什么改了 composer.json 但 Packagist 没反应
Packagist 不解析你本地或开发分支上的 composer.json 修改,它只读取你发布的每个 tag 对应快照里的文件内容。改完 composer.json 必须重新打 tag 才生效。
典型使用场景:你想调整 autoload 规则、增加 require 依赖、或修正 description —— 这些都不会热更新。
- 修改
composer.json后,运行git add composer.json && git commit -m "update autoload" - 打新 tag:
git tag v1.2.1(注意不要漏掉v,除非你明确在 Packagist 设置里关了 prefix) -
git push origin v1.2.1(只 push tag,不是--tags全推,避免误推旧 tag) - Packagist 通常几秒到两分钟内自动抓取;如果超时,再点一次页面上的 “Update” 按钮(本质是触发一次手动 hook)
如何安全地弃用一个旧版本或整个包
Packagist 不允许删除已发布的版本(这是语义化版本契约的一部分),但你可以标记为废弃(abandoned),这对用户是强提示。
性能/兼容性影响:未废弃的旧版本仍会被 composer update 拉取,尤其当 minimum-stability 设为 stable 时,可能意外锁进过时版本。
- 在 Packagist 包页面点击右上角 “Edit” → 勾选
Abandoned→ 填写替代包名(如neworg/new-package)或留空表示彻底停更 - 废弃整包后,新用户搜索时会看到醒目提示,但已有
composer.lock不受影响 - 别依赖“删 GitHub 仓库”来下线包——Packagist 缓存元数据至少 7 天,且已安装用户仍能通过 packagist.org 下载 zip 包
遇到 “This package is not auto-updated” 怎么办
这个提示说明 Packagist 和你的代码仓库之间断开了自动同步链路,最常见于 GitHub 账户权限变更、组织迁移、或 webhook 被手动删掉。
不是所有错误都报错,有时只是静默失败。建议每发一个 tag 后,立刻打开 Packagist 包页看 “Last updated” 时间戳是否变化。
- 检查 GitHub webhook 是否还在:Settings → Webhooks → 点击对应 hook → 看 Recent Deliveries 里最新几条是不是
200 OK - 如果显示
404或401,大概率是 Packagist 账户没权限访问该仓库(比如你用个人账号提交,但仓库属于组织,且没给 Packagist OAuth 权限) - 重新授权:去
https://packagist.org/profile/→ “Connect your GitHub account” → 重新授权,勾选对应 organization - 临时救急:在 Packagist 包页点 “Update”,它会强制重拉一次当前最新 tag(但不能解决后续自动同步问题)
最易被忽略的是:Packagist 只信任你 GitHub 账户下“拥有”或“有 admin 权限”的仓库。协作者(contributor)提交的 tag,如果没有对应权限设置,一样不会触发同步。











