如何解决如何防止 go get 更新 go.mod 文件
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
# (...)
我也尝试寻找类似的问题,例如 this one 或 this other one,但还没有找到替代方法来防止 go get
命令改变 go.mod
.
我用来阻止此行为的当前解决方法是在某些 git checkout -- go.mod
步骤后立即执行 go get …
以重置 go get
所做的任何更改,从而避免破坏性更改具有某些依赖项的较新版本。
我使用的是 Go 版本 1.16.3
。
解决方法
对于 Go 1.16 及更高版本,您可以使用 go install
安装二进制文件而不影响 go.mod
go install github.com/AsynkronIT/protoactor-go/protobuf/protoc-gen-gograin
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。