Composer本身没有non-feature-branches配置项,它不存在于任何版本中;该术语是误传,源于混淆Git分支命名习惯与Packagist索引策略,实际起作用的仅是git ls-remote可见性、dev-前缀约束写法及repositories声明。

Composer 本身没有 non-feature-branches 这个配置项或过滤机制——它根本不存在于 Composer 的任何版本(1.x 或 2.x)中,也不会在 composer.json、命令行参数或 Packagist 同步逻辑里起作用。
为什么你搜到的“non-feature-branches”可能是误导
这个术语常见于旧版 Packagist 文档、第三方博客或过时的 CI 脚本注释里,实际是误传或混淆了两个独立概念:
- Git 分支命名习惯:有人把
main、develop、release/*叫作 “non-feature”,而feature/*、bugfix/*叫 “feature branches”——但这只是团队约定,Composer 完全不识别也不区分 - Packagist 的分支索引策略:Packagist 默认只索引名称符合
dev-*格式的远程分支(如dev-main),但这是为了生成可用的dev-*版本标识,不是“过滤 feature 分支”
真正影响分支可见性的只有三件事
Composer 能否找到并安装某个分支,只取决于以下三点,和是否“feature”无关:
围绕关键发现、作用机制、临床相关性及研究局限性展开讨论。适用于撰写或优化任何生物医学论文的“讨论(Discussion)”部分——包括结果解读、与既往文献关联、阐释意外发现、界定研究局限性,以及撰写结论。当用户输入以下任一指令时也会自动触发该功能: - “write my discussion” - “help me discuss my findings” - “how do I compare to prior studies” - “write the limitations par
-
git ls-remote --heads <repo-url>能否列出该分支名(大小写敏感、必须存在、不含非法字符) - 你在
require中写的约束是否带dev-前缀(例如dev-feature/login,不能写成feature/login或dev/feature/login) - 项目根目录
composer.json是否已通过repositories正确声明该仓库(尤其是私有 GitLab/GitHub 地址)
如果你真想排除某些分支,只能靠 Git 层控制
Composer 不提供分支白名单/黑名单功能。若需限制可安装分支范围,唯一可行路径是:
- 在 Git 服务器(如 GitLab)上设置 protected branches,禁止推送
feature/*到默认源,让它们根本不出现在git ls-remote结果里 - 用自建私有 Packagist(如 Private Packagist 或 Satis),在镜像同步时用正则过滤分支名(例如只同步
^dev-(main|develop|release/)) - CI 脚本里加检查:
composer show vendor/package | grep -q "dev-feature/" && exit 1,在部署前拦截
最易被忽略的一点:所有声称能靠 non-feature-branches 控制依赖的文档或脚本,大概率混用了 Git 工作流术语和 Composer 机制——它们之间没有映射关系,强行套用只会导致 Could not find a version 却查不出原因。

















