我已经升级了项目以使用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模块的依赖关系?
答案 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。