2017-04-26 36 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的腳本。

希望有所幫助。

相關問題