我已将项目升级为使用go 1.11.2模块支持。但是,我遇到了一个非常烦人的问题。 go.mod文件在CI中不断变化。这是每天不同的文件。今天go.sum中的行是:
golang.org/x/net v0.0.0-20190213061140-3a22650c66bd h1:HuTn7WObtcDo9uEEU7rEqL0jYthdXAmZ6PP+meazmaU=
golang.org/x/net v0.0.0-20190213061140-3a22650c66bd/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
go.mod是:
golang.org/x/net v0.0.0-20190213061140-3a22650c66bd // indirect
我没有更新任何依赖项。他们没有锁定!为什么不?如果依赖关系不断变化,这是一个非常大的问题。但是,我没有看到其他人对这个问题尖叫。所以我一定做错了。
我正在使用go mod tidy
在git diff --exit-code
之前同步它。这适用于本地但不适用于Travis-CI。我认为这是一个问题,因为在Travis-CI上它需要获取依赖项,并且因为这些依赖项不使用语义版本控制,所以Go抓取最新的,每次提交时都会更改为master。如果您同意这是问题,如何使用Go模块锁定依赖项?
The wiki explains如何使用未选择进入模块的软件包
这是一个相关的片段:
如果存储库没有任何有效的semver标记,则存储库的版本将记录为“伪版本”,例如v0.0.0-20171006230638-a6e239ea1c69(其中包含时间戳和提交哈希,并且设计为允许在go.mod中记录的版本之间的总排序,以便更容易推断哪些录制版本比其他录制版本“更晚”。
你也可以require
特定的提交哈希:
在需要时,可以使用go get [email protected],go get foo @ master,go get foo @ e3702bed2或直接编辑go.mod等命令选择更具体的依赖项版本。