9

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

我如何告诉 Glide(或 Go)使用这些项目的本地版本(例如,$GOPATH/src/...vendor

举个例子:

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

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

4

2 回答 2

12

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

更新 1

我一直在为我的项目寻找相同的解决方案,然后我发现 glide 文档在 glide.yaml 上为导入指定了一个额外有用的参数。根据官方文档

repo:如果包名不是 repo 位置或者这是一个私有存储库,它可以到这里。该包将从 repo 中检出并放在包名称指定的位置。这允许使用分叉。

在这种情况下,你只需将你的代码推送到某个地方(我猜是你的 $GOPATH/src/github.com/hyperledger/burrow 的私人仓库的 GitHub 或 Gitlab),然后编辑你的 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

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

更新 2

另一种有用的方法是使用glide mirror

镜像提供了将存储库位置替换为原始镜像的另一个位置的能力。当您想要为持续集成 (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
于 2017-06-28T12:50:25.870 回答
5

鉴于 Go 供应商首先在您的项目根文件夹中查找包,/vendor当找不到时,然后在GOPATHGlide将您的依赖项安装/vendor到该文件夹​​中意味着您可以使用 设置您的项目glide install,然后手动删除本地的依赖项从项目文件夹中的本地安装中修改(或者您将要修改),/vendor然后 Go vendoring 将选择您在GOPATH.

测试完所有内容后,首先必须提交所有修改后的依赖项,然后返回项目并修改glide.yaml文件以使用这些依赖项的新版本。

这应该有效。

于 2017-07-06T11:51:41.070 回答