glide best practice - hanyong/note GitHub Wiki

glide 最佳实践

简单试用了几款 go 依赖管理工具, glide 感觉最好, 发展也很活跃。 glide 使用 go vendor 机制管理依赖, 建议配合 go 1.6 以上版本使用。

实际使用总结最佳实践如下,使用版本 0.10.2

glide init

首先在项目根目录执行 glide init 创建初始化 glide.yaml 文件。 glide 会自动扫描项目依赖并记录到 glide.yaml 文件中。 如果项目原先使用了 godep 等依赖管理工具, glide 会自动解析原有配置并迁移配置到 glide.yaml 文件中。

编辑 glide.yaml

如果有需要, 可参考 glide.yaml 语法文档手动创建或编辑 glide.yaml 文件。

glide update

glide update 将更新依赖并记录到 glide.lock 文件。

env LANG=C glide update --cache -s -v
  • glide 解析 git 输出时只支持英文, 所以要添加 LANG=C.

  • -s -v 参数删除依赖 vcs 目录, 方便将依赖提交到项目 vcs, 同时删除嵌套 vendor 目录,将依赖扁平化。 必须同时使用 -s 才能使用 -v。 使用 -s -v 后续再 update 时因为缺少依赖 vcs 目录会有问题 (依赖未更新, 并且 glide.lock 被错误修改), 可同时添加 -u 参数, 表示如果依赖没有 vcs 目录, 则删除依赖目录再重新获取最新依赖, 但这个功能貌似也有点问题。 比较可靠的还是先删除 vendor 目录再重新执行 update。 每次 glide update 都更新全部依赖, 感觉没有必要, 可能有风险, 并且浪费时间。

可选: 安装 glide-vc 后, 可执行 glide vc 删除不必要的依赖。

-v 同时会删除嵌套的 Godeps 依赖, 一些包 (如 etcd v2.3.7) 的依赖使用了 Godeps 重写, 删除嵌套 Godeps 可能有风险, 并且 glide 删除嵌套 Godeps 后不会重新引入嵌套 Godeps 依赖, 导致缺少依赖。 因此另一种思路时不添加 -s -v, 而是手动删除嵌套 vendor.

这种方式可写成如下 Makefile 规则:

.PHONY: up

# glide update
up:
	rm -rf glide.lock vendor/
	env LANG=C glide update --cache
	rm -rf $(shell find vendor/. -type d -name vendor -prune)
	env LANG=C glide vc

glide get

可通过 glide get 命令添加依赖并更新 glide.yaml:

env LANG=C glide get github.com/foo/bar#^1.2.3
⚠️ **GitHub.com Fallback** ⚠️