2017-04-26 119 views
1

我想为我的Go二进制文件c2go添加一个--version选项。是否可以通过“go get”获得git标签?

我知道传统上这将硬编码到二进制文件,但因为它是alpha质量软件,并且它经常更新,所以我想在go get构建可执行文件(来自git标签)时捕获版本。

这可能吗?

+0

我不是很清楚这个问题,看看这个帮助http://stackoverflow.com/a/42766877/3435777 – zzn

+0

'gopkg.in'被用作重定向服务以允许'go get'获取一个但我希望总是获取HEAD,但是当'go build'运行时捕获git标签,以便它可以自动将版本编码到应用程序中,而无需我更新它。 –

+1

可能的重复[如何做“去获取”的特定标签的github库](http://stackoverflow.com/questions/30188499/how-to-do-go-get-on-a-specific-标签的github库) –

回答

0

不,这是不可能的。 (注意,get get也支持其他的SCM)。

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)外壳脚本:

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

希望有所帮助。

相关问题