gvt全称为Go vendoring tool,可译为Go供应工具,或者意译为Go依赖包依赖包工具,whatever~~,简单来说就是可以方便的获取、更新、删除项目所依赖的工具包,这个特性在Go1.5之前并不支持,1.5版本中需要设置GO15VENDOREXPERIMENT=1才可以使用,1.6之后默认加入vendor属性,运行时Go会自动先在vendor目录下寻找依赖, 找不到才会在GOPATH路径下寻找依赖。这个gvt工具类似于Java里的maven,可以非常便捷的对项目依赖包进行管理,大大简化依赖包管理操作。
二、gvt的安装与使用安装:一条命令即可
go get -u github.com/FiloSottile/gvt
使用:
前面已经提到过,gvt工具会把项目依赖的包fetch到项目vendor文件夹下,那么gvt怎么zi'd知道需要哪些依赖呢?使用gvt时会在vendor文件夹下生成一个manifest文件,这个文件里的内容即为依赖包的地址,格式如下:
{
"version": 0,
"dependencies": [
{
"importpath": "github.com/PuerkitoBio/goquery",
"repository": "https://github.com/PuerkitoBio/goquery",
"revision": "2e29ea41f0d13f4a303c75553f4eeadddc7a4c56",
"branch": "master"
},
{
"importpath": "golang.org/x/text/runes",
"repository": "https://github.com/golang/text",
"revision": "dafb3384ad25363d928a9e97ce4ad3a2f0667e34",
"branch": "master",
"path": "/runes"
},
{
"importpath": "golang.org/x/text/transform",
"repository": "https://github.com/golang/text",
"revision": "dafb3384ad25363d928a9e97ce4ad3a2f0667e34",
"branch": "master",
"path": "/transform"
}
]
}
其中importpath指明了包的路径,repository指明了包所在的仓库,revision指明的包的ban'版本,branch为具体的分支。这个manifest文件其实就类似于maven里的pom.xml文件,熟悉Java的朋友一看便知。
1)基本命令:
gvt command [arguments]
command有以下几个:
fetch //获取一个远程依赖
restore //从manifest中恢复依赖
update //更新一个本地依赖
list //以行为单位列出所有依赖
delete //删除一个本地依赖
2)获取一个远程依赖
gvt fetch [-branch branch] [-revision rev | -tag tag] [-precaire] [-no-recurse] [-t|-a] importpath
a)由于分支的获取时递归进行的,因此若一个子路径下的包已经存在,则子包会被删除以防止chu'出现冲突,例如若本地已经存在一个包example.com/a/b,则当 example.com/a被fetch时,原来的子包会被删除。
b)path也可以是一个url,以此解决私有仓库不能huo获取依赖的问题
c)参数详解
-t
//获取also_tes.go文件和测试数据
-a
//获取所有文件和子文件夹,但是.git, .hg and .bzr会被忽略
-branch branch
//获取名为branch的分支。gvt update命令也会使用到,若不提供该参数,使用默认分支
-no-recurse
//非递归获取依赖
-tag tag
//获取指定标签的依赖
-revision rev
//从分支或仓库中获取指定版本的依赖,默认拉取最新版本的依赖包
-precaire
//允许使用不安全的协议
3)从manifest恢复依赖
gvt restore [-precaire] [-connections N]
参数:
-precaire
//允许使用不安全的协议
-connections
//指定可以并行下载的数量
4)更新一个本地依赖
gvt update [ -all | importpath ]
将会拉取最新数据,并且只有通过branch, 以及没有使用 -tag 或者-revision时才能才能进行更新
如果要通过分支进行更新,或者从一个tag/revision更新到另一个,则需要先delete依赖后再进行更新
参数:
-all
//更新manifest里的所有依赖
-precaire
//允许使用不安全的协议
5)以行的方式列出依赖
gvt list [-f format]
参数:
-f
//控制打印每个manifest实体的模板格式,若没有该参数,则默认打印格式为 "{{.Importpath}}\t{{.Repository}}{{.Path}}\t{{.Branch}}\t{{.Revision}}"
6)删除一个本地依赖
gvt delete [-all] importpath
该命令从vendor文件夹和manifest文件中移除一个依赖
参数:
-all
//删除所有依赖
以上就是gvt的简单使用jie'介绍,希望benefit you~~
三、参考资料