git 强制语义发布以部署下一版本

toe95027  于 2023-01-01  发布在  Git
关注(0)|答案(1)|浏览(166)

我收到test分支上CI触发的语义释放错误

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

我在文档中找到了故障排除,这适合这种情况-推送标签时参考已存在错误:
semantic-release读取发布分支历史记录中的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发布此代码并跳过无效发布,所有问题都可以修复。

d4so4syb

d4so4syb1#

我在一次失败的构建后遇到了同样的问题。在Azure构建管道中,我在语义发布任务中得到了错误Command failed with exit code 128: git tag 'v1.0.0-beta.39' already exists
我的解决方案是:

  • 拉入开发(受影响的分支)并从中创建新的功能分支
  • 删除本地标记:git tag -d v1.0.0-beta.39
  • 删除远程标记:git push origin :refs/tags/v1.0.0-beta.39
  • 将package.json和package-lock.json更改为先前版本:"version": "1.0.0-beta.38"
  • 将请求从新分支拉入开发

相关问题