go语言的依赖管理最主要的是版本控制问题。
govendor是Golang的依赖包管理工具,它的出现能够避免不一样用户在clone同一个项目后从外部获取不一样依赖库版本的问题。
govendor会将项目须要的依赖包添加到项目的vendor目录下,而且该目录中vendor.json文件会保存添加的依赖包的路径等信息。
Golang项目中的go文件在查找依赖的顺序是,先在vendor中查找,vendor没找到而后在GOPATH中查找,都没找到最后在GOROOT中查找。
govendor只是用来管理项目的依赖包,若是GOPATH中自己没有项目的依赖包,则须要经过go get先下载到GOPATH中,再经过govendor add +external拷贝到vendor目录中。git
安装govendor:go get -u github.com/kardianos/govendor
若是须要使用vendor的项目本来没有vendor,那么须要在该项目的目录下建立vendor
govendor init
以后若是须要添加依赖包,能够经过如下两种方式添加
govendor fetch 依赖包路径
govendor add 依赖包路径github
.gitignore的配置:shell
/vendor/* !/vendor/vendor.json
根据vendor.json下载依赖:govendor syncjson
govendor用法例子:app
cd path/to/project govendor init govendor fetch project_url_with_out_http cat vendor/vendor.json
➜ project_name git:(develop) govendor --help govendor (v1.0.9): record dependencies and copy into vendor folder -govendor-licenses Show govendor's licenses. -version Show govendor version -cpuprofile 'file' Writes a CPU profile to 'file' for debugging. -memprofile 'file' Writes a heap profile to 'file' for debugging. Sub-Commands init Create the "vendor" folder and the "vendor.json" file. list List and filter existing dependencies and packages. add Add packages from $GOPATH. update Update packages from $GOPATH. remove Remove packages from the vendor folder. status Lists any packages missing, out-of-date, or modified locally. fetch Add new or update vendor folder packages from remote repository. sync Pull packages into vendor folder from remote repository with revisions from vendor.json file. migrate Move packages from a legacy tool to the vendor folder with metadata. get Like "go get" but copies dependencies into a "vendor" folder. license List discovered licenses for the given status or import paths. shell Run a "shell" to make multiple sub-commands more efficient for large projects. go tool commands that are wrapped: "+status" package selection may be used with them fmt, build, install, clean, test, vet, generate, tool Status Types +local (l) packages in your project +external (e) referenced packages in GOPATH but not in current project +vendor (v) packages in the vendor folder +std (s) packages in the standard library +excluded (x) external packages explicitly excluded from vendoring +unused (u) packages in the vendor folder, but unused +missing (m) referenced packages but not found +program (p) package is a main package +outside +external +missing +all +all packages Status can be referenced by their initial letters. Package specifier <path>[::<origin>][{/...|/^}][@[<version-spec>]] Ignoring files with build tags, or excluding packages from being vendored: The "vendor.json" file contains a string field named "ignore". It may contain a space separated list of build tags to ignore when listing and copying files. This list may also contain package prefixes (containing a "/", possibly as last character) to exclude when copying files in the vendor folder. If "foo/" appears in this field, then package "foo" and all its sub-packages ("foo/bar", …) will be excluded (but package "bar/foo" will not). By default the init command adds the "test" tag to the ignore list. If using go1.5, ensure GO15VENDOREXPERIMENT=1 is set.
命令 | 功能 |
---|---|
init | 初始化 vendor 目录 |
list | 列出全部的依赖包 |
add | 添加包到 vendor 目录,如 govendor add +external 添加全部外部包 |
add | PKG_PATH 添加指定的依赖包到 vendor 目录 |
update | 从 $GOPATH 更新依赖包到 vendor 目录 |
remove | 从 vendor 管理中删除依赖 |
status | 列出全部缺失、过时和修改过的包 |
fetch | 添加或更新包到本地 vendor 目录 |
sync | 本地存在 vendor.json 时候拉去依赖包,匹配所记录的版本 |
get | 相似 go get 目录,拉取依赖包到 vendor 目录 |