travis-ci中的go.mod更改

时间:2019-02-15 17:32:50

标签: go travis-ci go-modules

我已经升级了项目以使用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 tidygit diff --exit-code之前进行同步。这在本地有效,但不适用于Travis-CI。我认为这是一个问题,因为在Travis-CI上它需要获取依赖关系,并且由于这些依赖关系不使用语义版本控制,因此Go可以获取最新的依赖关系,每次提交到master时都会改变。如果您同意这是问题所在,该如何锁定Go模块的依赖关系?

1 个答案:

答案 0 :(得分:5)

The wiki explains如何使用尚未选择go模块的软件包

以下是相关片段:

  

如果存储库没有任何有效的semver标签,则   存储库的版本将使用“伪版本”记录,例如   v0.0.0-20171006230638-a6e239ea1c69(其中包括时间戳和   提交哈希,其目的是允许跨   版本在go.mod中进行了记录,并使其更容易推断出哪个   记录的版本比另一个记录的版本“晚”。

您也可以require个特定的提交哈希值:

  

在需要时,可以选择以下更具体的依赖版本:   命令,例如go get foo@v1.2.3,go get foo @ master,go get   foo @ e3702bed2,或直接编辑go.mod。