Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

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

Tags:

git

github

go

I am trying to compile the InfluxDB database (version v0.8.8) using go get github.com/influxdb/influxdb

But this pulls the master branch, and I need the v0.8.8 tag.

I have tried to do: go get github.com/influxdb/influxdb/releases/tag/v0.8.8 but this fails saying unable to find.

I also tried to do a regular go get of the master branch, and then manually checking out the tag using git in GOPATH/src/github... in order to set the corret version.

The problem using the last approach is that when I try to pull the dependencies with go get -u -f ./... it tries to find them in the master branch, and some of them do not exist on the master branch...

TL;DR: perform go get on a specific github tag, and pull the correct dependencies.

like image 644
ESala Avatar asked May 12 '15 10:05

ESala


People also ask

How do I switch to a specific tag in Git?

To switch to a commit-like object, including single commits and tags, use git switch --detach <commitish> , where <commitish> is the tag name or commit number.

How do I pull code from GitHub tag?

Checkout Git Tag To fetch tags from your remote repository, use “git fetch” with the “–all” and the “–tags” options. Let's say for example that you have a tag named “v1. 0” that you want to check out in a branch named “release”. Using this command, you have successfully checked out the “v1.


1 Answers

It is not possible using the go get tool. Instead you need to use a third party go package management tool or create your own forks for the packages that you wish to manage more fine grained.

Spoke to a guy that works at Google and he acknowledged this problem/requirement, he said that vendoring which his team used was bulky and they will probably solve it with the official tools soon.

Read more:

  • Reference of third party package management tools
  • Blog post by golang team discussing the approach for implementing vendoring

Vendoring in Go 1.6

Vendoring has been released from experimental in go 1.6 (after this post was initially written) that makes the process of using specific tags / versions of packages using third party tools easier. go get does still not have the functionality to fetch specific tags or versions.

More about how vendoring works: Understanding and using the vendor folder

Modules in Go 1.11

Go 1.11 has released an experimental features called modules to improve dependency management, they hope to release it as stable in Go 1.12: Information about modules in Go 1.11

like image 77
Robin Andersson Avatar answered Oct 13 '22 14:10

Robin Andersson