🐡

go getで常に最新のcommitを使いたい場合

2020/09/23に公開2

⚠ この記事には嘘が書かれています。コメント部分を参照してください。

たまに自分で作った作りかけのパッケージに依存するときなどに、常に最新のcommitを利用したい場合がある。ここではリリース済みの最新バージョンを参照したいというわけではないので @latestは不適切。

調べてみたところ以下の様にすれば良さそう。

$ go get <repository>@HEAD

対象がgitのリポジトリなら。

公式のやり方ではなさそうだけれど、一度タグ無しのリポジトリに対してgo getしたあとに、リポジトリを更新し、go getしたときにもキャッシュが使われてしまって困ったことがあった (@masterなどしてしまったかもしれない)。

issues

code

1.15では cmd/go/internal/modfetch/codehost 付近だけど、internalなのでゴロゴロ変わりそう。

環境

$ go version
go version go1.15.1 darwin/amd64 

Discussion

podhmopodhmo

これウソっぽい。単にcacheのkeyにHEADが被らず実行できたので更新ができたというだけの模様。

go list -m <repository>@HEAD などとして確認するのが手軽

podhmopodhmo

正体はgoproxyっぽい。 go clean -modcache などしても何しても特定の時点でのパッケージがダウンロードされてしまう。

GOPROXY=direct go list -m <repository>@HEAD なら最新を参照できる。