如何使用本地版本的滑翔依赖项?

时间:2017-06-28 12:39:55

标签: go dependency-management glide-golang

我正在开发一个使用Glide进行依赖关系管理的Go项目。我需要对项目进行更改,还需要对项目使用的几个依赖项进行更改。在分别对每个项目进行更改之前,我需要一起测试这些更改。

我如何告诉Glide(或Go)使用这些项目的本地版本(例如在$GOPATH/src/...中找到)而不是将其填入并填入vendor目录中?

举个例子:

  • github.com/hyperledger/burrow取决于:
  • github.com/tendermint/tendermint,取决于:
  • github.com/tendermint/go-crypto

我需要对所有三个项目进行一些更改。我想通过执行burrow项目中的内容来测试更改,但是我需要它来执行我在本地的tendermintgo-crypto的开发版本。

2 个答案:

答案 0 :(得分:11)

如果你想测试'$ GOPATH / src / ...'下的依赖项,只需暂时删除项目根目录中的每个滑行文件(glide.yaml,glide.lock等等)。 然后,如果您需要再次使用“供应商”依赖项,则可以放回这些文件。

更新1

我正在为我的项目寻找相同的解决方案,然后我发现滑行文档为glide.yaml指定了一个额外有用的参数用于导入。 根据{{​​3}}:

  

repo:如果包名称不是回购地点或       这是一个私人存储库,它可以在这里。       该包将从回购中检出       并放入包名称指定的位置。       这允许使用货叉。

在这种情况下,你只需将你的代码推送到某处(GitHub或Gitlab用于$ GOPATH / src / github.com / hyperledger / burrow的私人回购),然后编辑你的glide.yaml:

- package: github.com/tendermint/tendermint <-- vendor name dependencies
  repo:    github.com/myrepo/tendermint   <-- your remote fork
  version: vx.x.x or your sha commit code

通过这种方式,您可以从正式版本切换到fork并进行测试。 要返回正式版,只需删除或评论repo和版本属性:

- package: github.com/tendermint/tendermint <-- vendor name dependencies
#  repo:    github.com/myrepo/tendermint   <-- your remote fork
#  version: vx.x.x or your sha commit code

我现在正以这种方式测试我的分叉,你不需要将导入路径更改为代码,希望这会有所帮助。

更新2

另一种有用的方法是使用the official documentation

  

镜子提供了替换回购地点的能力       另一个位置是原始的镜像。       当您想要连续缓存时,这非常有用       集成(CI)系统或者如果您想处理依赖关系       当地的一个地方。

我猜这个是最好的解决方案,例如,在命令行类型:

$ glide mirror set github.com/tendermint/tendermint file:///User/yourname/Gospace/src/github.com/tendermint/tendermint

这将在您的GLIDE_HOME中创建一个mirror.yaml(如果不存在则将放在您的$ USER / .glide文件夹下)。 现在你可以测试你的本地版本(在GOPATH下)而不用fork你的项目(如上所述)。 完成测试后,只需删除它:

$ glide mirror remove github.com/tendermint/tendermint

答案 1 :(得分:5)

鉴于Go vendoring首先在项目根/vendor文件夹中查找软件包,如果没有找到,则在GOPATH和Glide 安装您的依赖项{ {1}}文件夹意味着您只需使用/vendor设置项目,然后在项目的本地安装中手动删除本地修改(或您要修改)的依赖项。 glide install文件夹和Go vendoring将选择/vendor下的本地修改版本。

一旦测试了所有内容,首先必须提交所有已修改的依赖项,然后返回到项目并修改GOPATH文件以使用这些依赖项的新版本。

这应该有用。