glide best practice - hanyong/note GitHub Wiki
简单试用了几款 go 依赖管理工具, glide 感觉最好, 发展也很活跃。
glide 使用 go vendor 机制管理依赖,
建议配合 go 1.6
以上版本使用。
实际使用总结最佳实践如下,使用版本 0.10.2
。
首先在项目根目录执行 glide init
创建初始化 glide.yaml
文件。
glide 会自动扫描项目依赖并记录到 glide.yaml
文件中。
如果项目原先使用了 godep 等依赖管理工具,
glide 会自动解析原有配置并迁移配置到 glide.yaml
文件中。
如果有需要, 可参考 glide.yaml 语法文档手动创建或编辑 glide.yaml
文件。
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.yaml
:
env LANG=C glide get github.com/foo/bar#^1.2.3