首页 > 解决方案 > 强制语义发布以与下一个版本一起部署

问题描述

test我从分支上的 CI 触发的 sematic-release 收到错误

Command failed with exit code 128: git tag vX.XX.XX <commit id>
fatal: tag 'vX.XX.XX' already exists

当我推送未发布的无效代码时,问题就开始了,所以为了回滚我所做的更改git reset --hard <to-id-with-last valid version>

* commitB my invalid changes 
| 
* commitA - refactor: last publish working version # => v4.2.0 
|
* commit0 - older code 
|

复位后git reset --hard commitA

* commitA - refactor: last publish working # now failed
|
* commit0 - older code # => v4.1.0 
|

代码看起来不错,但语义释放失败并出现错误:

Command failed with exit code 128: git tag v4.2.0  commitA
fatal: tag 'v4.2.0 ' already exists

我在文档中找到了适合这种情况的故障排除 -推送标签时参考已经存在错误

语义发布读取发布分支历史记录中存在的 Git 标记,以确定最后发布的版本。然后它根据从那时起推送的提交确定下一个要发布的版本,并创建相应的标签。如果您的存储库中已经存在具有该名称的标签,Git 将抛出错误,因为标签在存储库中必须是唯一的。(...) 如果发布了具有该版本号的实际版本,您需要将直到该版本的所有提交合并到您的发布分支中。

版本v4.2.0已发布,但现在没有。当我推送更新的代码时,它也会失败并出现同样的错误。

* commitC - chore: newer changes # failed
|
* commitA - refactor: # failed
|
* commit0 - older code # => v4.1.0 
|
Command failed with exit code 128: git tag v4.2.0 commitC
fatal: tag 'v4.2.0' already exists

如果我能够使用下一版本 v4.3.0 或 4.2.1 发布此代码并跳过无效发布,则所有问题都可以解决。

标签: gitsemantic-release

解决方案


推荐阅读