如何做到“去获取”一个github仓库的特定标签

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

但是,这拉主分支,我需要v0.8.8标记。

我试图做到: go get github.com/influxdb/influxdb/releases/tag/v0.8.8但这失败说无法find。

我也尝试go get GOPATH/src/github... master分支,然后使用GOPATH/src/github...中的git手动检查标签,以便设置对应的版本。

使用最后一种方法的问题是,当我尝试拉取依赖关系时, go get -u -f ./...它试图在主分支中find它们,而其中一些分支不存在于主分支上。 。

TL; DR :执行go get一个特定的github标签,并拉取正确的依赖关系。

使用go get工具是不可能的。 相反,您需要使用第三方的包pipe理工具,或者为您希望pipe理更细粒度的包创build您自己的叉子。

说到一个在Google工作的人,他承认这个问题/要求,他说,他的团队使用的服务很笨重,他们可能很快就会用官方工具来解决这个问题。

阅读更多:

  • 第三方包pipe理工具的参考
  • golang团队的博客文章讨论了实施vendoring的方法

在Go中供应

Vendor已经从1.6版本的实验版本中解放出来 (在这篇文章最初编写之后),使得使用第三方工具的特定标签/版本的软件包变得更加容易。 go get仍然没有function来获取特定的标签或版本。

更多关于如何工作的原理: 了解和使用供应商文件夹

我已经成功了:

  • 运行没有标签的get命令 – 它应该克隆主分支。
  • 移动到克隆目录并签出您想要的标签或分支。
  • 再次运行go get命令,它应该处理签出分支上的命令。

我有一个(有点hackish,但工作)的方法来解决这个问题,至less对于git仓库:作为get'ed包是普通的源代码控制库,可以检查出标签使用常规的git工具(可以使用git从命令行,我正在使用Atlassian SourceTree)。

为了与我的队友分享我的软件包configuration,我已经把git仓库作为我的GOPATH了 。 然后我把所有包(至less是我想要这样pipe理的包)添加到这个回购作为git子模块。 这就要求你将exo文件夹移开,重新添加为git子模块,不要混淆git。 这个过程有点繁琐,但certificate是值得的麻烦:

我现在可以提交并推送到我的GOPATH回购每时每刻我使用一个新的去包。 当我的队友从这个仓库中取出一个git子模块更新(或者只是通过SoureTree更新,这会自动完成),他们的软件包版本会和我的标签签出。

当然,这只适用于Git源代码控制下的软件包…

maven golang插件允许在GET期间使用分支,标签和修订版本,可以使用GIT存储库查看这种情况下的testing