Rio*_*Rio 4 git version-control go
我想将当前的git修订版号添加到构建的二进制文件中,go build
以便我可以做一些类似于./mybinary --revision
查看它的构建版本的内容(通常用于稍后部署后的故障排除).显然,我不能将修订号放入源中,因为这将使用新修订更改源.我想知道是否有其他方法可以做到这一点?或者你认为这只是一个坏主意?如果是这样,建立二进制文件与其源版本之间关系的推荐方法是什么?对于分布式版本控制系统,版本号似乎不是一个好主意.
如果你可以将git修订版带入$ VERSION并version
在主包中有一个名为(type string)的变量,你可以在构建期间使用以下命令设置它:
#!/bin/sh
VERSION=`git rev-parse --short HEAD`
go build -ldflags "-X main.version=$VERSION" myfile.go
Run Code Online (Sandbox Code Playgroud)
ldflags
从 Go 1.18(2021 年第 4 季度/2022 年第 1 季度)开始,正常流程不应再涉及任何。
该
go
命令现在将版本控制信息嵌入到二进制文件中,包括当前签出的修订版本和指示是否存在已编辑或未跟踪文件的标志。
go
如果在 Git 或 Mercurial 存储库内的目录中调用命令,并且main
包及其包含main
模块位于同一存储库中,则嵌入版本控制信息。
可以使用标志省略该信息-buildvcs=false
。此外,该
go
命令嵌入以下信息:
- 构建包括构建和工具标签(使用 进行设置
-tags
),- 编译器,
- 汇编器,和
- 链接器标志(如
-gcflags
),- 是否
cgo
启用,如果启用,则显示cgo
环境变量的值(如CGO_CFLAGS
)。可以使用标志省略该信息
-buildinfo=false
。VCS 和构建信息都可以与模块信息一起读取,使用:
go version -m file
或者runtime/debug.ReadBuildInfo
(对于当前运行的二进制文件)或- 新
debug/buildinfo
包。
- 该
BuildInfo
结构具有新字段,其中包含有关如何构建二进制文件的附加信息。- 新
GoVersion
字段保存用于构建二进制文件的 Go 版本。- 新字段是保存描述构建的键/值对的结构体
Settings
切片。BuildSettings
归档时间: |
|
查看次数: |
1462 次 |
最近记录: |