查找当前主模块的伪版本
Find the Pseudo-version of the current, main module
我有一个 Go codegen 工具,在将它构建为二进制文件时,我想在构建时使用 Go 工具为其主模块注入它自己的当前 Pseudo-version。
我知道对于依赖项,我可以使用 go list -m all
或 go 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 工具来获取当前的伪版本,而不是我在餐巾纸上弄出来的一些骇人听闻的 bash 东西。关于如何执行此操作有什么建议吗?
pseudo-versions 的问题在于它只是 VCS 中特定修订版的编码(不仅仅是 Git)。
而且,它通常在模块没有 semver 标签时使用,或者当您只需要一个特定的修订版时,它可以是分支名称。
Pseudo-versions may refer to revisions for which no semantic version tags are available. They may be used to test commits before creating version tags, for example, on a development branch.
因此,要获得伪版本,首先您必须参考 修订版。现在,哪个版本最准确地描述了您的项目,这将取决于您。 master
分支的提示可能足够好,因此:
go list -f '{{.Version}}' -m example.com/mymodule@master
注意语法 module@version
,它允许您选择特定的修订版,从而获得相应的伪版本。
我有一个 Go codegen 工具,在将它构建为二进制文件时,我想在构建时使用 Go 工具为其主模块注入它自己的当前 Pseudo-version。
我知道对于依赖项,我可以使用 go list -m all
或 go 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 工具来获取当前的伪版本,而不是我在餐巾纸上弄出来的一些骇人听闻的 bash 东西。关于如何执行此操作有什么建议吗?
pseudo-versions 的问题在于它只是 VCS 中特定修订版的编码(不仅仅是 Git)。
而且,它通常在模块没有 semver 标签时使用,或者当您只需要一个特定的修订版时,它可以是分支名称。
Pseudo-versions may refer to revisions for which no semantic version tags are available. They may be used to test commits before creating version tags, for example, on a development branch.
因此,要获得伪版本,首先您必须参考 修订版。现在,哪个版本最准确地描述了您的项目,这将取决于您。 master
分支的提示可能足够好,因此:
go list -f '{{.Version}}' -m example.com/mymodule@master
注意语法 module@version
,它允许您选择特定的修订版,从而获得相应的伪版本。