簡體   English   中英

如何在 github 存儲庫的特定標簽上執行“go get”

[英]How to do "go get" on a specific tag of a github repository

我正在嘗試使用go get github.com/influxdb/influxdb編譯 InfluxDB 數據庫(版本 v0.8.8)

但這會拉動主分支,我需要v0.8.8標簽。

我試圖這樣做: go get github.com/influxdb/influxdb/releases/tag/v0.8.8但這失敗說無法找到。

我還嘗試對 master 分支進行常規go get ,然后在GOPATH/src/github...中使用git手動檢出標簽以設置正確版本。

使用最后一種方法的問題是,當我嘗試使用go get -u -f ./...拉取依賴項時,它試圖在 master 分支中找到它們,而其中一些在 master 分支上不存在.. .

TL;DR :在特定的 github 標簽上執行go get ,並拉取正確的依賴項。

無法使用go get工具。 相反,您需要使用第三方 go 包管理工具或為您希望管理更細粒度的包創建自己的分支。

與一位在 Google 工作的人交談,他承認了這個問題/要求,他說他的團隊使用的 vendoring 很龐大,他們可能很快會用官方工具解決它。

閱讀更多:

Go 1.6 中的供應商

Vendoring 已經從 go 1.6 中的實驗性版本中發布(在這篇文章最初寫完之后),這使得使用第三方工具使用特定標簽/包版本的過程變得更加容易。 go get仍然沒有獲取特定標簽或版本的功能。

有關 vendoring 如何工作的更多信息:了解和使用供應商文件夾

Go 1.11 中的模塊

Go 1.11 發布了一個名為 modules 的實驗性功能來改進依賴管理,他們希望在 Go 1.12 中將其發布為穩定的:關於 Go 1.11 中模塊的信息

go mod現在可用。

對於那些需要構建特定標簽的二進制文件的人,這是我的方法:

mkdir temp
cd temp
go mod init local/build  # or `go mod init .` before go 1.13
go get -d -v github.com/nsqio/nsq@v1.1.0
mkdir bin
go build -o bin/nsqd.exe github.com/nsqio/nsq/apps/nsqd

解釋:

  • 上面的代碼拉取 NSQ v1.1.0 並構建nsqd
  • go mod init . 在當前目錄中創建一個go.mod文件,它允許使用帶有修訂/標簽的go get (見這個鏈接
  • -d表示“僅下載”,如果您想直接安裝,請省略此標志和此行下方的構建命令。
  • -v意思是“冗長”。
  • 以上代碼適用於Windows。 如果您使用 Linux,請將bin/nsqd.exe替換為bin/nsqd

下載的模塊存儲在%GOPATH%\\pkg\\mod 如果您不想污染您的GOPATH目錄,請創建一個新目錄並將您的GOPATH設置GOPATH目錄。

我在這方面取得了成功:

  • 運行沒有標簽的 get 命令 - 它應該克隆主分支。
  • 移至克隆目錄並簽出所需的標記或分支。
  • 再次運行 go get 命令,它應該處理檢出分支上的命令。

這個問題早於Go Modules ,但為了將來參考,Go 1.11 中獲取特定版本的正確過程是這樣的:

go get github.com/influxdb@[version]

或者獲取特定的 git 標簽:

go get github.com/influxdb@[gitref]

我有一種(有點 hackish,但有效)方法來解決這個問題,至少對於 git 存儲庫:因為 go get'ed 包是普通的源代碼控制存儲庫,所以可以使用普通的 git 工具檢查標簽(可以從命令行使用 git ,我正在使用 Atlassian SourceTree)。

為了與我的隊友分享我的包配置,我在我的 GOPATH 中創建了一個git 存儲庫 然后我將所有包(至少是我想以這種方式管理的包)作為 git 子模塊添加到這個 repo 中。 這需要您將現有的 repo 文件夾移開,並將它們重新添加為 git 子模塊,以免混淆 git。 這個過程有點乏味,但事實證明是值得的:

我現在可以在每次使用新的 go 包時提交並推送到我的 GOPATH-repo。 當我的隊友從這個 repo 中拉取並發出 git 子模塊更新(或簡單地通過 SoureTree 更新,它會自動執行此操作)時,他們的包版本將在與我的相同的標簽上簽出。

當然,這只適用於 git 源代碼控制下的包......

maven golang 插件允許在 GET 期間使用分支、標記和修訂,您可以使用 GIT 存儲庫查看它對此類情況的測試

要更新 GO api 的版本,請按照以下步驟操作。

例如,我想將以下 api 更新為特定標簽。

實際回購: https : //github.com/fraugster/parquet-go

標簽: https : //github.com/fraugster/parquet-goreleases/tag/v0.5.0

轉到您的根目錄

go get -u https://github.com/fraugster/parquet-go@v0.5.0 `

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM