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
I have a (somewhat hackish, but working) approach to address this problem, at least for git repositories: As go get'ed packages are normal source control repositories, one can check out tags using normal git tools (could use git from command line, I am using Atlassian SourceTree).
To share my package configuration with my teammates, I have made a git repository out ouf my GOPATH. I then added all packages (at least the ones I wanted to manage this way) to this repo as git submodule. This requires you to move the exising repo folders out of the way and re-add them as git submodule, to not confuse git. This process is somewhat tedious, but proved to be worth the trouble:
I can now commit and push to my GOPATH-repo every timy I use a new go package. When my teammates pull from this repo and issue a git submodule update (or simply update via SoureTree, which does this automatically), their version of the package gets checked out on the same tag as mine is.
Of course this does only work for packages under git source control...
I've had success with this:
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:
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
This question predates Go Modules, but for future reference the correct procedure in Go 1.11 for fetching a specific version is this:
go get github.com/influxdb@[version]
Or to get a specific git tag:
go get github.com/influxdb@[gitref]
maven golang plugin allows to play with branch, tag and revision during GET, you can take a look at its test for such cases with GIT repository
go mod
is available now.
For those who need to build a binary of a specific tag, here is my way:
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
Explanation:
nsqd
.go mod init .
creates a go.mod
file in the current directory, which enables using go get
with revision/tags. (see this link)-d
means "download only", if you want a direct installation, omit this flag and the build commands below this line.-v
means "be verbose".bin/nsqd.exe
with bin/nsqd
.The module downloaded is stored in %GOPATH%\pkg\mod
. If you don't want to pollute your GOPATH
directory, make a new one and set your GOPATH
to it.