我想爲我的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庫) –