一、gvt概念

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~~

三、参考资料