0

go list -m -versions gopkg.in/urfave/cli.v1给了我以下版本列表,最新版本为 1.20.0:

gopkg.in/urfave/cli.v1 v1.0.0 v1.1.0 v1.2.0 v1.3.0 v1.3.1 v1.4.0 v1.4.1 v1.5.0 v1.6.0 v1.7.0 v1.7.1 v1.8.0 v1.9.0 v1.10.0 v1.10.1 v1.10.2 v1.11.0 v1.11.1 v1.12.0 v1.13.0 v1.14.0 v1.15.0 v1.16.0 v1.16.1 v1.17.0 v1.17.1 v1.18.0 v1.18.1 v1.19.0 v1.19.1 v1.20.0

但是,根据gopkg.in, 1.22.4 应该是最新版本。1.22.4 也是包的 GitHub repo上的最新版本。

我应该如何解决这个问题?似乎它可能是一个缓存问题。

背景信息:存储库最初具有基于 dep 的依赖项列表 (Gopkg.toml),其版本为 1.20。我更喜欢模块,所以我将 go.mod 初始化为go mod init $REPO_URL. 后来我从 repo 中提取了最新的提交,它的包版本更新到了 1.22。我尝试重新创建go.mod;它首先表明该步骤存在问题:

go: converting Gopkg.lock: stat gopkg.in/urfave/cli.v1@v1.22.0: gopkg.in/urfave/cli.v1@v1.22.0: invalid version: go.mod has non-....v1 module path "github.com/urfave/cli" at revision v1.22.0

最后,我得到了需要 1.22 版本的代码,但是这些工具获取的 1.20 版本不向前兼容,因此无法编译。

4

1 回答 1

3

无法修复它。包坏了,所以包作者/维护者需要修复它。

简而言之,该项目有一个无效go.mod文件,该文件显然是在 v1.20.0 发布后添加的——这就是为什么可以使用该版本的原因。

go.mod文件引用“github.com/urfave/cli”,但包被导入为“gopkg.in/urfave/cli.v1”。该go.mod文件需要更新以反映正确的导入路径。

作为一种解决方法,将包导入为“github.com/urfave/cli”可能会起作用,但这会破坏许多具有引用备用导入路径的“子”包的包。不过,我会说在这种情况下值得一试。

于 2020-07-21T11:14:15.033 回答