我正在开发一个使用Glide进行依赖关系管理的Go项目。我需要对项目进行更改,还需要对项目使用的几个依赖项进行更改。在分别对每个项目进行更改之前,我需要一起测试这些更改。
我如何告诉Glide(或Go)使用这些项目的本地版本(例如在$GOPATH/src/...
中找到)而不是将其填入并填入vendor
目录中?
举个例子:
github.com/hyperledger/burrow
取决于:github.com/tendermint/tendermint
,取决于:github.com/tendermint/go-crypto
我需要对所有三个项目进行一些更改。我想通过执行burrow
项目中的内容来测试更改,但是我需要它来执行我在本地的tendermint
和go-crypto
的开发版本。
答案 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
文件以使用这些依赖项的新版本。
这应该有用。