繁体   English   中英

如何在具有向后标记版本的 Github 上修复 go release 版本控制?

[英]How to fix go release versioning on Github that has backward tag version?

我有一个 Go 模块发布到 Github。 一开始,我将它标记为v1.0.0,它在我直接从 Github 导入该模块的主程序上完美运行。

但在接下来的版本中,我已经落后标记它v.0.1.1,因为我觉得我的模块还不稳定- >(基于语义版本不稳定的版本必须与0.xy开始)。

这在今天成为一个问题,因为我使用 golint 和这个工具,它说go-mod-outdated 目前,版本是 v0.5.x 并且在它之前有很多版本(在我使用 lint 和一些 lint 工具之前)

任何想法来解决它?

事情的Semver方面

根据 semver 的说法,根据规范第 9 项,可以使用连字符标记不稳定的较新版本

预发布版本可以通过在补丁版本之后立即附加连字符和一系列点分隔标识符来表示。 标识符必须仅包含 ASCII 字母数字和连字符 [0-9A-Za-z-]。 标识符不得为空。 数字标识符不得包含前导零。 预发布版本的优先级低于相关的普通版本。 预发布版本表示该版本不稳定并且可能不满足其关联的正常版本所表示的预期兼容性要求。 示例:1.0.0-alpha、1.0.0-alpha.1、1.0.0-0.3.7、1.0.0-x.7.z.92、1.0.0-xyz.–。

所以这里的问题是你改变了什么? 如果您刚刚添加了一些功能,但没有对 API 引入任何重大更改,则应将不稳定版本标记为: v1.1.0-alpha.1 然后可以将不稳定版本的修复标记为v1.1.0-alpha.2等等。

如果您以v2.0.0-alpha.1方式更改了包的 API,则该版本应标记为v2.0.0-alpha.1 对 alpha 的修复应以与以前相同的方式进行标记:增加-alpha后缀后的最后一位数字。

最后,如果您没有以任何方式更改 API,也没有添加任何功能,那么您只需将您的版本标记为v1.0.1-alpha 基本上,标准的semver东西。
当然,如果您处于这种特殊情况,那么事实是您过早地将您的软件包标记为v1.0.0 ,因为推送补丁仍然会导致不稳定。

您可以通过删除标记来寻址/重新标记现有的v1.0.0版本,并相应地标记该版本。 这可以使用以下命令轻松完成:

# check out the version to re-tag
$ git checkout v1.0.0
# tag the version with the desired tag
$ git tag v0.1.1
# push the tag
# if you're brave, you could just git push --tags, but that's not ideal
$ git push origin v0.1.1
# now delete the offending tag
$ git tag -d v1.0.0
# remove the tag remotely
$ git push origin :refs/tags/v1.0.0

好的,github 仓库不再有v1.0.0标签。 存储库的任何克隆可能仍然具有旧标签,如果有人推送git push --tags ,那将恢复v1.0.0标签(因此我的评论说git push --tags并不理想)。 如果您的包被广泛使用,这需要与包的所有用户进行一些沟通。

最后,继续前进,你最好阅读一下go mod如何处理版本(它的要点是:遵循 semver 2.0,你应该没问题)。 伪发布和预发布具有您应该使用的特定格式

Golang (go mod) 细节

一旦模块被标记并发布,它就在那里。 你应该做的是使用retract指令retract损坏的版本

你说你现在使用的是v0.5.x版本,你发布的下一个版本应该在go.mod文件中包含以下内容:

retract (
    v1.0.0
)

发布您的乐观标记版本的撤回。 例如,如果您将此版本重新标记为v0.1.0 ,那么您可以使用replace指令 老实说,我从未使用replace将我的模块的一个版本指向同一模块的另一个版本,但这可能值得一试:

replace (
    github.com/your/package v1.0.0 => github.com/your/package v0.1.0
)

我必须说:即使这行得通,它也是一种黑客行为,我不能保证它在发布新版本的软件包时能很好地发挥作用。 我强烈建议你发布v1.0.0标签的收回,重新标记它(可以说v0.0.0是这里使用的版本),从现在开始,遵循 semver 和 golang pre-release/pseudo -发布版本控制标准。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM