🐡
go getで常に最新のcommitを使いたい場合
⚠ この記事には嘘が書かれています。コメント部分を参照してください。
たまに自分で作った作りかけのパッケージに依存するときなどに、常に最新のcommitを利用したい場合がある。ここではリリース済みの最新バージョンを参照したいというわけではないので @latest
は不適切。
調べてみたところ以下の様にすれば良さそう。
$ go get <repository>@HEAD
対象がgitのリポジトリなら。
公式のやり方ではなさそうだけれど、一度タグ無しのリポジトリに対してgo getしたあとに、リポジトリを更新し、go getしたときにもキャッシュが使われてしまって困ったことがあった (@master
などしてしまったかもしれない)。
issues
code
1.15では cmd/go/internal/modfetch/codehost 付近だけど、internalなのでゴロゴロ変わりそう。
- https://github.com/golang/go/blob/release-branch.go1.15/src/cmd/go/internal/modfetch/codehost/git.go
環境
$ go version
go version go1.15.1 darwin/amd64
Discussion
これウソっぽい。単にcacheのkeyにHEADが被らず実行できたので更新ができたというだけの模様。
go list -m <repository>@HEAD
などとして確認するのが手軽正体はgoproxyっぽい。
go clean -modcache
などしても何しても特定の時点でのパッケージがダウンロードされてしまう。GOPROXY=direct go list -m <repository>@HEAD
なら最新を参照できる。