Go 包伪版本

伪版本管理

Posted by WR on December 18, 2022

什么是 go.mod 伪版本标签?

​ 当我们使用 go module 进行包管理的时候,往往需要生成一个 go mod 文件,当我们引入三方包的时候,会在 go mod 文件中 require 对应的包,对应语法如下:

1
2
3
4
5
module rain
go 1.18

require github.com/gin-gonic/gin v1.8.0
require vimagination.zapto.org/byteio v0.0.0-20200222190125-d27cba0f0b10

​ require github.com/gin-gonic/gin v1.8.0 为导入一个版本为 1.8.0 的 gin 包,

​ require vimagination.zapto.org/byteio v0.0.0-20200222190125-d27cba0f0b10 相比 gin 包,后面还多了一长串 20200222190125-d27cba0f0b10 字符,这个包对应的就是伪版本。

为什么会有伪版本?

​ 正常我们 import 一个包的时候,通常会在 go mod 文件里面引入该包最新的一个稳定版本,如果包没有打 tag 进行版本发布,那么就生成一个 伪版本,这是一种版本语法,专门用于标记没有 tag 的提交。前面部分为语义化版本号,用于标记版本。中间部分为 UTC 的提交时间,用于比较两个伪版本以其确定先后顺序。后面部分是 commit 哈希的前缀,用于标记该版本位于哪个 commit。

​ 另外当我们进行团队协作时,一些项目在开发中,所以不能打 tag 发布上线,但又有其它项目需要依赖开发中的功能,因此可以通过打伪版本的方式引用最新的代码。

如何对还未发布的功能生成伪版本?

​ 假如 vimagination.zapto.org/byteio 最新版本是 v1,另外有开发中的功能,对应 commit id 是:6c86e49378a593aa43af5e56ee769703d9dc1249,我们可以使用命令 go get vimagination.zapto.org/byteio@6c86e49378a593aa43af5e56ee769703d9dc1249(也可以只使用前12位 commit id)生成对应的伪版本包。