<p>non-feature-branches 并非 Composer 原生配置项,而是私有仓库(如 Satis、Private Packagist)或插件中用于定义哪些 Git 分支不被视为功能分支、从而不暴露为 dev- 版本的自定义规则;Composer 本身仅识别 dev-前缀分支、tag 版本等标准格式,忽略该字段。</p>

什么是 non-feature-branches?它不是 Composer 的配置项
你搜到的 non-feature-branches 并非 Composer 原生支持的字段或命令,它常见于某些私有仓库(如 Satis、Private Packagist)或自定义 Composer 插件中,用于限制哪些 Git 分支**不被视为功能分支(feature branch)**,从而避免被当作可安装的开发版本(如 dev-*<font color="red">xxx</font>)暴露给 composer require 或 composer update。
标准 Composer 本身只识别以下版本标识:
-
dev-main、dev-develop:对应分支名 +dev-前缀 -
v1.2.3、1.2.3:带 tag 的稳定版本 -
dev-feature/login-ui:任意含/的分支,会被自动识别为dev-版本
所以如果你在 composer.json 里硬加一个 "non-feature-branches": ["ci", "tmp"],Composer 会直接忽略它——既不报错,也不生效。
想屏蔽某些分支不被当作 dev 版本?得靠仓库端控制
真正起作用的位置不在你的项目 composer.json,而是在你所用的包源(Package Repository)配置里。例如:
- 用
satis搭建私库时,在satis.json中通过"require-dependencies": false和"only": ["^1.0"]过滤,或用"providers": []手动排除分支 - 用
Private Packagist时,在 Web 控制台设置 “Ignored branches” 列表(填ci、chore/docs等) - GitHub/GitLab 作为源时,Composer 本身无法过滤分支——它会拉取所有含
composer.json的分支,但你可以靠minimum-stability+prefer-stable降低误装风险
示例:在根项目 composer.json 中收紧稳定性策略:
{
"minimum-stability": "stable",
"prefer-stable": true,
"require": {
"monolog/monolog": "^3.0"
}
}
这样即使远程有 dev-hotfix/db-lock 分支,也不会被 composer update 拉下来,除非你显式写 "monolog/monolog": "dev-hotfix/db-lock"。
围绕关键发现、作用机制、临床相关性及研究局限性展开讨论。适用于撰写或优化任何生物医学论文的“讨论(Discussion)”部分——包括结果解读、与既往文献关联、阐释意外发现、界定研究局限性,以及撰写结论。当用户输入以下任一指令时也会自动触发该功能: - “write my discussion” - “help me discuss my findings” - “how do I compare to prior studies” - “write the limitations par
本地开发时怎么避免误装 feature 分支?
日常协作中,最常踩的坑是:别人 push 了一个临时分支(比如 feature/refactor-api),你运行 composer update 后,Composer 自动把它识别成 dev-feature/refactor-api 并“升级”进 composer.lock——下次 CI 就可能炸了。
防御手段很简单,三选一:
- 始终在
composer.json中锁定具体版本,不用dev-前缀,例如:"vendor/package": "2.1.0"而非"vendor/package": "dev-main" - CI 流水线中加检查:
grep -q 'dev-' composer.lock && exit 1,禁止 lock 文件里出现任何dev-字样 - 本地开发用
--with-all-dependencies时格外小心——它会强制更新所有依赖的 dev 分支,哪怕你没改composer.json
为什么别折腾 “禁用某分支” 的本地方案?
有人试图用 repositories + package 类型伪造一个“阉割版”包,手动列出允许的分支,但这会导致:
-
composer update失去自动发现能力,新 tag 不会被感知 - 每次上游新增稳定版,你都得手动同步
repositories配置 - 团队成员的
composer.lock会因配置差异产生冲突
真正可持续的做法,是把分支治理交给 Git 工作流:约定主干用 main/release/*,功能分支命名带 feat/、fix/ 前缀,并在仓库服务端(而非 Composer 客户端)统一过滤。
记住:Composer 不是 Git 权限系统,也管不了分支语义。想让它“看不见”,就得让它压根 fetch 不到——那地方不在你本地,而在你配的那个 packagist.org 或私库地址背后。

















