查找当前主模块的伪版本

我有一个Go codegen工具,在将其构建为二进制文件时,我想在构建时使用Go工具为它的主模块注入它自己的当前伪版本。


我知道对于依赖项,我可以使用 或 找到它们的伪版本。主模块的版本列为空。go list -m allgo list -m -f '{{ .Version }}' $MODULE


我知道我可以计算出当前的伪版本:


git describe --tags `git rev-list --tags --max-count=1`

和:


TZ=UTC git --no-pager show \

   --quiet \

   --abbrev=12 \

   --date='format-local:%Y%m%d%H%M%S' \

   --format="%cd-%h"

要得到一个合理的近似值,例如:v0.3.0-20210907161133-495c072cb418


在我拥有伪版本之后,我打算在构建时注入它,如下所示:


go build -ldflags="-X generate.version v0.3.0-20210907161133-495c072cb418" -o mytool ./main.go

但是,建议直接使用Go工具来获取当前的伪版本,而不是我在餐巾纸上解决的一些黑客抨击问题。关于如何做到这一点的任何建议?


守着星空守着你
浏览 59回答 1
1回答

陪伴而非守候

伪版本的问题是,它只是VCS中特定修订版的编码(不仅仅是Git)。而且,它通常用于模块没有 semver 标记,或者当您只需要特定修订版(可以是分支名称)时。伪版本可能是指没有语义版本标记可用的修订版。它们可用于在创建版本标记之前测试提交,例如,在开发分支上。因此,要拥有伪版本,首先必须参考修订版。现在,哪一个是最准确地描述您的项目的修订版,这将取决于您。分支的尖端可能就足够了,因此:mastergo list -f '{{.Version}}' -m example.com/mymodule@master请注意 语法 ,它允许您选择特定的修订版,因此,获取相应的伪版本。module@version
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Go