1

我收到一个编译错误,这让我相信我的供应商文件夹中有错误版本的库。第一项任务是确定库的哪个版本是正确的。我需要找到包含字符串“VolumeCreateRequest”的库源版本。为此,我使用了库根文件夹中的这个技巧:

git rev-list --all | xargs git grep VolumeCreateRequest

从中我找到了版本哈希06f160237426e705ed214a4f087d4aeea32c0a8b::

然后我尝试将该版本添加到我的供应商文件夹中 go vendor add github.com/docker/docker/...@06f160237426e705ed214a4f087d4aeea32c0a8b

但它不起作用。当我使用 git 检查库的版本时,它不会报告我刚刚获取的版本。

git log -n 1 --pretty=format:"%H"

vendor.json 文件还包含错误的版本

那么这是什么一回事?仔细阅读文档后,我看到 go vender add只是默默地忽略了@06f160237426e705ed214a4f087d4aeea32c0a8b我的 fetch URI 末尾的 。

正确的命令是支持 @version的 go vendor fetch

govendor fetch github.com/docker/docker/...@06f160237426e705ed214a4f087d4aeea32c0a8b

完成此操作的另一种方法是在您的 GOPATH 中(即不在您的供应商文件夹中)中 git checkout 您想要的库版本,然后govendor add是您的 GOPATH 中的包

所以现在我检查了 git 版本,我们都很好。然后出现了下一个问题。我们的 generate.go 文件(由 调用go generate)正在进入并用vendor.json我的 GOPATH 上的内容覆盖我所需的版本。

我们的序列generate.go是:

//go:generate govendor add +external
//go:generate govendor fetch +missing
//go:generate go vendor sync

结果证明这是错误的,因为添加会覆盖我的更改,然后同步无效,因为 vendor.json 已经感染了错误的版本。

正确的顺序是这样的:

//go:generate govendor sync
//go:generate govendor add +external
//go:generate govendor fetch +missing

这样,您自定义的 vendor.json 将首先将供应商文件夹同步到所需的文件夹然后才会下载外部和缺少的依赖项。

最后,一些依赖项实际上根本无法编译到平台特定的东西。为了解决这个问题,我在 generate.go 中添加这些行以删除那些损坏的依赖项,我同步、添加、获取之后

//go:generate govendor remove github.com/docker/docker/runconfig
//go:generate govendor remove github.com/docker/docker/libcontainerd
//go:generate govendor remove github.com/docker/libcompose/test
//go:generate govendor remove github.com/Microsoft/...
4

0 回答 0