是否可以通过“go get”获取git标签?

时间:2017-04-26 00:24:17

标签: git go

我想在我的Go二进制文件c2go中添加--version选项。

我知道传统上这会被硬编码到二进制文件中,但由于它是alpha质量软件并且它经常更新,我想在go get构建可执行文件时(从git标签)捕获版本。

这可能吗?

2 个答案:

答案 0 :(得分:1)

这并不完全回答你的问题,但我解决类似需求的方式如下。

在我的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)shell脚本构建我的应用程序:

#!/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的脚本。

希望有所帮助。

答案 1 :(得分:0)

不,这是不可能的。 (注意,除了git之外,还要支持其他SCM。)