“non-feature-branches”不是composer原生配置项,composer.json中添加该字段完全无效;它仅存在于satis、private packagist等私有仓库服务或自研插件中,用作分支过滤的扩展规则。

non-feature-branches 不是 Composer 原生配置项
你在 composer.json 里加 "non-feature-branches": ["ci", "tmp"],Composer 完全无视它——既不报错,也不生效。这不是漏配或写法问题,而是根本不存在于 Composer 解析逻辑中。官方文档、源码和所有稳定版本(包括 2.7.x)均无该字段定义。
它实际出现在哪些地方?
这个字段只在私有包仓库服务中作为**扩展规则**出现,典型场景包括:
- Satis 的
repositories配置中,用于过滤分支发布行为 - Private Packagist 的 Web UI 或 API 配置里,控制“哪些分支不生成
dev-版本” - 某些自研 Composer 插件(如内部镜像同步工具)自行解析并应用该字段
这些系统会扫描 Git 分支,把未列在 non-feature-branches 中的分支自动映射为 dev-xxx 版本供 composer require 使用;而 ci、tmp 这类分支被排除后,就不会出现在 composer show -a 结果里。
使用ydata-profiling(前身为pandas-profiling)生成全面的数据质量报告,包含相关性分析、缺失值模式和基数检测。导出交互式HTML仪表板和JSON摘要。
想实现类似效果?得换思路
如果你的目标是「不让某些分支被当作可安装版本」,可行路径只有两条:
- 在私有仓库侧配置(如 Satis 的
branch-alias+require过滤),而非改项目级composer.json - 用 Git 约定:给不应暴露的分支起名不含
/且不以main/develop等常见主干名开头——因为 Composer 仅对含/的分支(如feature/login)自动加dev-前缀;纯字母数字分支(如ci)默认不识别为开发版本
注意:dev-ci 这种手动带前缀的写法仍会被识别,所以命名要避开 dev- 开头 + 含斜杠的组合。
容易被忽略的关键点
很多人花时间调试 non-feature-branches 却卡在 CI 流程里,其实真正生效的位置不在本地 composer install,而在私有仓库构建索引那一步。如果你没部署 Satis 或没接入 Private Packagist,这个字段连被读取的机会都没有。










