使用dep时强制特定版本的依赖项

时间:2018-01-20 20:47:57

标签: go dependencies dependency-management

我正在使用 dep 来管理我写作的Go工具的依赖关系。

此工具使用https://github.com/desertbit/grumble作为依赖项。这反过来使用https://github.com/chzyer/readline作为依赖。问题是,当我尝试运行我的工具时,我收到以下错误: vendor/github.com/desertbit/grumble/app.go:295:20: unknown field 'HistorySearchFold' in struct literal of type readline.Config

我知道为什么会这样。 grumble 使用 readline 分支作为依赖项。在此,字段HistorySearchFold可用。 使用dep init / dep ensure而非时, 1.4 标记会被提取到供应商文件夹中。

我的问题是:我如何强制 dep 来取代分支?

我尝试在Gopkg.toml文件中添加以下内容:

[[constraint]]
  branch = "master"
  name = "github.com/chzyer/readline"

可悲的是,这不起作用。当我检查拉入供应商文件夹的版本时,它仍然是 1.4

1 个答案:

答案 0 :(得分:7)

如果您尝试控制瞬态依赖项的版本(不是您的软件包直接使用的版本,则应使用[[override]] directive

它看起来与约束完全相同,但即使不是由包直接继承,它也会限制依赖关系。

[[override]]
  branch = "master"
  name = "github.com/chzyer/readline"

请注意,这对于依赖项解算器发现冲突依赖项时也很有用,例如:你的软件包P使用软件包A和B,两者都依赖于软件包X的不同版本...你可以在软件包P的内部使用套餐P