繁体   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