在使用dep时,如何强制要求特定版本的依赖包?

5

我正在使用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使用readlinemaster分支作为依赖项。在这个分支中,字段HistorySearchFold是可用的。当使用dep init/dep ensure时,不是将master而是将1.4标签拉入vendor文件夹。

因此,我的问题是:如何强制dep拉取master分支?

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

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

很遗憾,这不起作用。当我检查放入供应商文件夹的版本时,它仍然是1.4

1个回答

12

如果您尝试控制短暂依赖项(不是直接由您的软件包使用的依赖项)的版本,则应使用 [[override]] 指令

它与约束条件完全相同,但即使未直接继承您的软件包,它也将约束依赖项。

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

请注意,当依赖项解析器发现冲突依赖项时,这也很有用。例如,您的软件包P使用软件包A和B,并且两者都依赖于软件包X的不同版本... 您可以在软件包P内部使用对软件包X的覆盖。


工作得非常好,就像你描述的一样。谢谢。 - Christian

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接