微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

如何防止 go get 更新 go.mod 文件

如何解决如何防止 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 onethis 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 举报,一经查实,本站将立刻删除。