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`.
这会导致CI构建期间更改go.mod
文件,并影响后续构建阶段,在构建某些内容时,它将尝试使用依赖项的更新版本,这可能会导致中断更改,而不是最初在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
。
发布于 2021-04-19 14:22:52
对于Go 1.16和之后,可以使用go install
安装二进制文件,而不影响go.mod
go install github.com/AsynkronIT/protoactor-go/protobuf/protoc-gen-gograin
https://stackoverflow.com/questions/67160629
复制相似问题