我想为我的Go二进制文件c2go添加一个--version
选项。是否可以通过“go get”获得git标签?
我知道传统上这将硬编码到二进制文件,但因为它是alpha质量软件,并且它经常更新,所以我想在go get
构建可执行文件(来自git标签)时捕获版本。
这可能吗?
我想为我的Go二进制文件c2go添加一个--version
选项。是否可以通过“go get”获得git标签?
我知道传统上这将硬编码到二进制文件,但因为它是alpha质量软件,并且它经常更新,所以我想在go get
构建可执行文件(来自git标签)时捕获版本。
这可能吗?
不,这是不可能的。 (注意,get get也支持其他的SCM)。
这并不完全回答你的问题,但我解决类似需求的方式如下。
在我main
包,我定义了以下变量:
var (
buildInfo string
buildStamp = "No BuildStamp provided"
gitHash = "No GitHash provided"
version = "No Version provided"
)
,并在我的main
功能,我执行下面的代码:
if buildInfo != "" {
parts := strings.Split(buildInfo, "|")
if len(parts) >= 3 {
buildStamp = parts[0]
gitHash = parts[1]
version = parts[2]
}
}
然后我用下面的bash
构建我的应用程序(Linux)外壳脚本:
#!/bin/sh
cd "${0%/*}"
buildInfo="`date -u '+%Y-%m-%dT%TZ'`|`git describe --always --long`|`git tag | tail -1`"
go build -ldflags "-X main.buildInfo=${buildInfo} -s -w" ./cmd/...
您将需要调整Windows和MacOS的脚本。
希望有所帮助。
我不是很清楚这个问题,看看这个帮助http://stackoverflow.com/a/42766877/3435777 – zzn
'gopkg.in'被用作重定向服务以允许'go get'获取一个但我希望总是获取HEAD,但是当'go build'运行时捕获git标签,以便它可以自动将版本编码到应用程序中,而无需我更新它。 –
可能的重复[如何做“去获取”的特定标签的github库](http://stackoverflow.com/questions/30188499/how-to-do-go-get-on-a-specific-标签的github库) –