【问题标题】:Find the Pseudo-version of the current, main module查找当前主模块的伪版本
【发布时间】:2021-10-03 04:11:12
【问题描述】:

我有一个 Go 代码生成工具,在将其构建为二进制文件时,我想在构建时使用 Go 工具注入它自己的当前 Pseudo-version 作为它的主模块。

我知道对于依赖项,我可以使用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 工具来获取当前的伪版本,而不是我在餐巾纸上制作的一些 hacky bash 东西。有关如何执行此操作的任何建议?

【问题讨论】:

    标签: go go-modules


    【解决方案1】:

    pseudo-versions 的问题在于它只是 VCS(不仅仅是 Git)中特定版本的编码。

    而且,它通常在模块没有 semver 标签时使用,或者当您只需要该标签时,使用特定修订版,可以是分支名称。

    伪版本可能指没有语义版本标签可用的修订。它们可用于在创建版本标签之前测试提交,例如,在开发分支上。

    所以要有一个伪版本,首先你必须参考修订版。现在,哪一个是最准确地描述您的项目的版本,这将取决于您。 master 分支的尖端可能已经足够好了,因此:

    go list -f '{{.Version}}' -m example.com/mymodule@master
    

    注意语法module@version,它允许你选择一个特定的版本,从而得到相应的伪版本。

    【讨论】:

    • 谢谢!很好的解释,即使在 git 存储库 example.com/mymodule 中也能完美运行。
    猜你喜欢
    • 2020-03-30
    • 1970-01-01
    • 1970-01-01
    • 2016-03-13
    • 1970-01-01
    • 2012-04-11
    • 2021-04-17
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多