如何对github存储库的特定标记执行"go get"

ESa*_*ala 66 git github go

我正在尝试使用编译InfluxDB数据库(版本v0.8.8) go get github.com/influxdb/influxdb

但这会拉动主分支,我需要v0.8.8标签.

我试图这样做: go get github.com/influxdb/influxdb/releases/tag/v0.8.8但是这说不能说找不到.

我还尝试定期go get执行master分支,然后使用gitin 手动检出标记GOPATH/src/github...以设置corret版本.

使用最后一种方法的问题是,当我尝试使用go get -u -f ./...它来拉动依赖项时,尝试在主分支中找到它们,并且其中一些在主分支上不存在...

TL; DR:go get对特定的github标记执行,并提取正确的依赖项.

Rob*_*son 34

使用该go get工具是不可能的.相反,您需要使用第三方转包管理工具或为您希望管理更精细的包创建自己的分支.

他向一个在谷歌工作的人发表了讲话,他承认了这个问题/要求,他说他的团队使用的售卖很笨重,他们很快就会用官方工具来解决这个问题.

阅读更多:

在Go 1.6中供应

供应已经从第1.6版(最初编写本文之后)的实验中发布,这使得使用第三方工具使用特定标签/版本的软件包的过程更加容易.go get仍然没有获取特定标签或版本的功能.

有关如何工作的更多信息:了解和使用供应商文件夹

Go 1.11中的模块

Go 1.11发布了一个名为模块的实验性功能来改善依赖管理,他们希望在Go 1.12中将其发布为稳定版:Go 1.11中的模块信息

  • AFAIK,唯一的提议是官方供应商/依赖文件格式.这仍然很棒,因为项目不会依赖于依赖工具,并且可以与他们想要的任何解决方案互操作(即我更喜欢修订锁定,而其他人更喜欢销售). (2认同)

小智 10

我在这方面取得了成功:

  • 运行不带标记的get命令 - 它应克隆主分支.
  • 移动到克隆目录并签出所需的标记或分支.
  • 再次运行go get命令,它应该在签出的分支上处理命令.

  • 在第一次运行时,您可以使用`go get -d <git-url>`来下载软件包并跳过安装. (3认同)

brk*_*brk 10

go mod 现在可用。

对于那些需要构建特定标签的二进制文件的人,这是我的方法:

mkdir temp
cd temp
go mod init .
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
Run Code Online (Sandbox Code Playgroud)

说明:

  • 上面的代码提取NSQ v1.1.0并进行构建nsqd
  • go mod init .go.mod在当前目录中创建一个文件,该文件可go get与修订/标签一起使用。(请参阅此链接
  • -d 表示“仅下载”,如果要直接安装,请忽略此标志以及此行下方的build命令。
  • -v 表示“冗长”。
  • 上面的代码适用于Windows。如果您使用Linux,请替换bin/nsqd.exebin/nsqd

下载的模块存储在中%GOPATH%\pkg\mod。如果您不想污染GOPATH目录,请新建一个目录并将其设置为该目录GOPATH

  • 在 go 1.13 中, `go mod init` 需要一个模块 id,例如 `go mod init local/build` (5认同)

emi*_*der 8

这个问题早于Go Modules,但为了将来参考,Go 1.11 中获取特定版本的正确过程是这样的:

go get github.com/influxdb@[version]
Run Code Online (Sandbox Code Playgroud)

或者获取特定的 git 标签:

go get github.com/influxdb@[gitref]
Run Code Online (Sandbox Code Playgroud)