为何@semantic-release/commit-analyzer会分析所有分支提交?
问题:semantic-release为何分析所有提交而非仅master分支?
我的配置文件(.releaserc.yml)
plugins: - "@semantic-release/commit-analyzer" branches: - "master"
Git提交日志
* 224400b (HEAD -> master) fix: merge-1 | | * a28d643 (dev) commit-3 | * d7b35be commit-2 | * ee711df commit-1 | * b2b696e .gitignore * 970faff (origin/release, origin/master, origin/HEAD) initial commit
执行semantic-release后的日志
[12:44:27 PM] [semantic-release] › ℹ Start step "analyzeCommits" of plugin "@semantic-release/commit-analyzer" [12:44:27 PM] [semantic-release] [@semantic-release/commit-analyzer] › ℹ Analyzing commit: fix: merge-1 [12:44:27 PM] [semantic-release] [@semantic-release/commit-analyzer] › ℹ The release type for the commit is patch [12:44:27 PM] [semantic-release] [@semantic-release/commit-analyzer] › ℹ Analyzing commit: commit-3 [12:44:27 PM] [semantic-release] [@semantic-release/commit-analyzer] › ℹ The commit should not trigger a release [12:44:27 PM] [semantic-release] [@semantic-release/commit-analyzer] › ℹ Analyzing commit: commit-2 [12:44:27 PM] [semantic-release] [@semantic-release/commit-analyzer] › ℹ The commit should not trigger a release [12:44:27 PM] [semantic-release] [@semantic-release/commit-analyzer] › ℹ Analyzing commit: commit-1 [12:44:27 PM] [semantic-release] [@semantic-release/commit-analyzer] › ℹ The commit should not trigger a release [12:44:27 PM] [semantic-release] [@semantic-release/commit-analyzer] › ℹ Analyzing commit: .gitignore [12:44:27 PM] [semantic-release] [@semantic-release/commit-analyzer] › ℹ The commit should not trigger a release [12:44:27 PM] [semantic-release] [@semantic-release/commit-analyzer] › ℹ Analyzing commit: initial commit [12:44:27 PM] [semantic-release] [@semantic-release/commit-analyzer] › ℹ The commit should not trigger a release [12:44:27 PM] [semantic-release] [@semantic-release/commit-analyzer] › ℹ Analysis of 6 commits complete: patch release [12:44:27 PM] [semantic-release] › ✔ Completed step "analyzeCommits" of plugin "@semantic-release/commit-analyzer"
原因解释
这是因为branches配置的作用是指定允许触发发布流程的分支,而非限制提交分析的范围。
semantic-release默认会分析从上次发布的标签(首次发布则从初始提交开始)到当前HEAD的所有可达提交——你把dev分支合并到master后,dev上的commit-1、commit-2、commit-3都属于master分支提交历史的一部分(从初始提交到当前HEAD的路径包含这些提交),所以会被纳入分析。
不过你也能看到,只有符合语义化提交规范的fix: merge-1被判定为触发patch版本更新,其他不符合规范的提交都被标记为不触发发布,最终还是只基于有效提交生成版本。
如果想避免分析合并进来的非规范提交,要么在合并时使用 squash 合并(把dev的多个提交压缩成一个符合规范的提交后再合并到master),要么调整@semantic-release/commit-analyzer的配置,通过ignore规则过滤掉不符合格式的提交,但本质上只要提交在当前分支的历史链里,就会被扫描到。
内容的提问来源于stack exchange,提问作者tweetysat
相关产品推荐
相关产品推荐

