TL;DR:有什么办法可以强制阻止
go get
更改go.mod
文件吗?
当我对某些包进行go get
时,例如:
$ go get github.com/AsynkronIT/protoactor-go/protobuf/protoc-gen-gograin
它将打印出它有更新的依赖项(在我的go.mod
文件中定义(:
go get: upgraded github.com/AsynkronIT/protoactor-go v0.0.0-20200815184336-b225d28383f2 => v0.0.0-20210405044454-10bc19881ad6
# (...) Note, this happens for other packages, not just `AsynkronIT/protoactor-go`.
这会导致go.mod
文件在CI生成过程中发生更改,并影响后续的生成阶段,在生成某些内容时,它将尝试使用依赖项的更新版本,这可能会带来破坏性的更改,而不是最初在go.mod
文件上定义的版本。
我已经尝试使用-mod=readonly
或确保未使用-u
标志,但它仍然会更新go.mod
文件,例如:
$ GOFLAGS=-mod=readonly go get github.com/AsynkronIT/protoactor-go/protobuf/protoc-gen-gograin
go get: upgraded github.com/AsynkronIT/protoactor-go v0.0.0-20200815184336-b225d28383f2 => v0.0.0-20210405044454-10bc19881ad6
# (...)
我也尝试过找到类似的问题,比如这个或另一个,但还没有找到防止go get
命令更改go.mod
的替代方案。
我目前用来阻止这种行为的解决方法是在某些go get …
步骤之后立即执行git checkout -- go.mod
,以重置go get
所做的任何更改,从而避免破坏具有某些依赖关系的更改(更新版本(。
我使用的是go版本1.16.3
。
对于Go 1.16及更高版本,您可以使用go install
安装二进制文件,而不会影响go.mod
go install github.com/AsynkronIT/protoactor-go/protobuf/protoc-gen-gograin