如何防止 go get 更新 go.mod 文件
How to prevent go get from updating go.mod file
TL;DR: Is there any way I can forcefully prevent go get
from altering the go.mod
file?
当我对某些包执行 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, or this other one,但还没有找到替代方法来防止 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
TL;DR: Is there any way I can forcefully prevent
go get
from altering thego.mod
file?
当我对某些包执行 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, or this other one,但还没有找到替代方法来防止 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