glide

glide

項目地址

下面可能是從 github 的 readme 中翻譯的。git

原理

掃描項目或庫的源碼來檢測須要的依賴。爲了檢測版本和位置,Glide須要一個glide.yaml文件。 依賴的包會統計imports來掃描它的依賴。若是依賴的項目也包含glide.yaml文件,將使用該文件幫助檢測依賴規則。Godep, GB, GOM, GPM的配置也導進來了。 依賴會被導出到vendor/目錄,這樣go工具可以找到並使用它們。 glide.lock文件中包含全部的依賴,包括依賴的依賴。 glide init命令用來設置一個新項目。glide update經過掃描和規則從新生成依賴版本。glide install會安裝列舉在glide.lock中的版本而不進行掃描,除非glide.lock文件沒找到。github

安裝

在 Mac 或者 Linux 上最簡單的安裝最新版的腳本是:web

curl https://glide.sh/get | sh

在 Mac 上也能夠經過 Homebrew 安裝:編程

$ brew install glide

在 Ubuntu Precise(12.04), Trusty (14.04), Wily (15.10) 或 Xenial (16.04) 上:bash

sudo add-apt-repository ppa:masterminds/glide && sudo apt-get update
sudo apt-get install glide

二進制包 適用於 Mac, Linux, Windows。curl

開發版經過 go get github.com/Masterminds/glide 得到源碼。ide

使用

$ glide create                            # Start a new workspace
$ open glide.yaml                         # and edit away!
$ glide get github.com/Masterminds/cookoo # Get a package and add to glide.yaml
$ glide install                           # Install packages and dependencies
# work, work, work
$ go build                                # Go tools work normally
$ glide up                                # Update to newest versions of the package

glide create(又名init)

初始化一個新的工做區。建立一個glide.yaml文件並寫入猜想的包和版本。例如,若是你的項目用的是Godep,那就用Godep指定的版本。Glide足夠聰明,可以掃描你的代碼庫並檢測導入的包,無論你是否是用其餘包管理工具指定的。工具

$ glide create
[INFO]	Generating a YAML configuration file and guessing the dependencies
[INFO]	Attempting to import from other package managers (use --skip-import to skip)
[INFO]	Scanning code to look for dependencies
[INFO]	--> Found reference to github.com/Masterminds/semver
[INFO]	--> Found reference to github.com/Masterminds/vcs
[INFO]	--> Found reference to github.com/codegangsta/cli
[INFO]	--> Found reference to gopkg.in/yaml.v2
[INFO]	Writing configuration file (glide.yaml)
[INFO]	Would you like Glide to help you find ways to improve your glide.yaml configuration?
[INFO]	If you want to revisit this step you can use the config-wizard command at any time.
[INFO]	Yes (Y) or No (N)?
n
[INFO]	You can now edit the glide.yaml file. Consider:
[INFO]	--> Using versions and ranges. See https://glide.sh/docs/versions/
[INFO]	--> Adding additional metadata. See https://glide.sh/docs/glide.yaml/
[INFO]	--> Running the config-wizard command to improve the versions in your configuration

這裏說的 config-wizard(配置嚮導)能夠如今運行,也能夠之後運行,它能幫助你指出你可使用的依賴包的版本範圍。測試

glide config-wizard

這個命令運行一個嚮導,它會掃描你的依賴並從中檢索信息,提出建議,你能夠交互式的選擇。例如,它能夠發現一個依賴包使用了語義版本,你能夠選擇要使用的版本範圍。ui

glide get [package name]

你能夠經過 glide get 下載一個或多個包到你的 vendor 目錄,並添加到你的 glide.yaml 文件中:

glide get github.com/Masterminds/cookoo

這個命令會深刻列出的包並經過Godep, GPM, Gom, 和 GB 的配置文件獲取它的依賴。 能夠在get時指定版本或分支或版本範圍:

glide get github.com/a/b#master
glide get github.com/a/b#^1.2.3

關於版本號的說明能夠參考:https://glide.readthedocs.io/en/latest/versions/

glide update(又名up)

下載或更新全部列在 glide.yaml 文件中的庫,並放到 vendor 目錄下。它會遞歸遍歷依賴的包並拉取所須要的和從配置中讀取的任何東西。

$ glide up

它會遞歸遍歷其餘包,從中尋找使用Glide, Godep, gb, gom, 和 GPM 管理的其餘項目,一旦找到,這些包將會按需安裝。 當依賴使用了特定的版本時, glide.lock 文件會被建立或更新。例如,若是在 glide.yaml 中一個版本號使用的是一個範圍(好比 ^1.2.3),那麼在 glide.lock 中就會被設置爲特定的 commit id。這容許可重現的安裝(見 glide install)。 從拉取的包中移除任何遞歸的 vendor 目錄的話見 -v 標記。

glide install

當你想從 glide.lock 文件中安裝指定版本時,使用 glide install

$ glide install

這會讀取 glide.lock 文件,而後安裝 commit id 指定的版本。 當 glide.lockglide.yaml 不一樣步時,好比有一個更改,這個命令會發出警告。 更改依賴樹時,運行 glide up 會重建 glide.lock 文件。 若是沒有 glide.lock 文件,那麼 glide install 會表現的像 update,生成一個 lock 文件。 從拉取的包中移除任何遞歸的 vendor 目錄的話見 -v 標記。

glide novendor (別名 nv)

當你運行 go test ./... 這樣的命令時它會遍歷全部的子目錄包括 vendor。你可能只想測試你本身的項目,而不是依賴的項目。這就是 novendor 的意義所在,它能夠列舉出除了 vendor 的其餘全部目錄。

$ go test $(glide novendor)

這個命令能夠在你項目的全部目錄上運行 go test 除了 vendor 目錄。

glide name

當你使用glide進行腳本編程時,有種場景是你須要知道你工做的包的名稱。glide name 返回列舉在 glide.yaml中的包名。

glide tree

Glide 中包含一些檢查代碼並給出導入詳情的命令,glide tree 就是其中之一,運行它給出的數據像這樣:

$ glide tree
github.com/Masterminds/glide
	github.com/Masterminds/cookoo   (/Users/mfarina/Code/go/src/github.com/Masterminds/glide/vendor/github.com/Masterminds/cookoo)
		github.com/Masterminds/cookoo/io   (/Users/mfarina/Code/go/src/github.com/Masterminds/glide/vendor/github.com/Masterminds/cookoo/io)
	github.com/Masterminds/glide/cmd   (/Users/mfarina/Code/go/src/github.com/Masterminds/glide/cmd)
		github.com/Masterminds/cookoo   (/Users/mfarina/Code/go/src/github.com/Masterminds/glide/vendor/github.com/Masterminds/cookoo)
			github.com/Masterminds/cookoo/io   (/Users/mfarina/Code/go/src/github.com/Masterminds/glide/vendor/github.com/Masterminds/cookoo/io)
		github.com/Masterminds/glide/gb   (/Users/mfarina/Code/go/src/github.com/Masterminds/glide/gb)
		github.com/Masterminds/glide/util   (/Users/mfarina/Code/go/src/github.com/Masterminds/glide/util)
			github.com/Masterminds/vcs   (/Users/mfarina/Code/go/src/github.com/Masterminds/glide/vendor/github.com/Masterminds/vcs)
		github.com/Masterminds/glide/yaml   (/Users/mfarina/Code/go/src/github.com/Masterminds/glide/yaml)
			github.com/Masterminds/glide/util   (/Users/mfarina/Code/go/src/github.com/Masterminds/glide/util)
				github.com/Masterminds/vcs   (/Users/mfarina/Code/go/src/github.com/Masterminds/glide/vendor/github.com/Masterminds/vcs)
			github.com/Masterminds/vcs   (/Users/mfarina/Code/go/src/github.com/Masterminds/glide/vendor/github.com/Masterminds/vcs)
			gopkg.in/yaml.v2   (/Users/mfarina/Code/go/src/gopkg.in/yaml.v2)
		github.com/Masterminds/semver   (/Users/mfarina/Code/go/src/github.com/Masterminds/glide/vendor/github.com/Masterminds/semver)
		github.com/Masterminds/vcs   (/Users/mfarina/Code/go/src/github.com/Masterminds/glide/vendor/github.com/Masterminds/vcs)
		github.com/codegangsta/cli   (/Users/mfarina/Code/go/src/github.com/Masterminds/glide/vendor/github.com/codegangsta/cli)
	github.com/codegangsta/cli   (/Users/mfarina/Code/go/src/github.com/Masterminds/glide/vendor/github.com/codegangsta/cli)
	github.com/Masterminds/cookoo   (/Users/mfarina/Code/go/src/github.com/Masterminds/glide/vendor/github.com/Masterminds/cookoo)
		github.com/Masterminds/cookoo/io   (/Users/mfarina/Code/go/src/github.com/Masterminds/glide/vendor/github.com/Masterminds/cookoo/io)
	github.com/Masterminds/glide/gb   (/Users/mfarina/Code/go/src/github.com/Masterminds/glide/gb)
	github.com/Masterminds/glide/util   (/Users/mfarina/Code/go/src/github.com/Masterminds/glide/util)
		github.com/Masterminds/vcs   (/Users/mfarina/Code/go/src/github.com/Masterminds/glide/vendor/github.com/Masterminds/vcs)
	github.com/Masterminds/glide/yaml   (/Users/mfarina/Code/go/src/github.com/Masterminds/glide/yaml)
		github.com/Masterminds/glide/util   (/Users/mfarina/Code/go/src/github.com/Masterminds/glide/util)
			github.com/Masterminds/vcs   (/Users/mfarina/Code/go/src/github.com/Masterminds/glide/vendor/github.com/Masterminds/vcs)
		github.com/Masterminds/vcs   (/Users/mfarina/Code/go/src/github.com/Masterminds/glide/vendor/github.com/Masterminds/vcs)
		gopkg.in/yaml.v2   (/Users/mfarina/Code/go/src/gopkg.in/yaml.v2)
	github.com/Masterminds/semver   (/Users/mfarina/Code/go/src/github.com/Masterminds/glide/vendor/github.com/Masterminds/semver)
	github.com/Masterminds/vcs   (/Users/mfarina/Code/go/src/github.com/Masterminds/glide/vendor/github.com/Masterminds/vcs)
	github.com/codegangsta/cli   (/Users/mfarina/Code/go/src/github.com/Masterminds/glide/vendor/github.com/codegangsta/cli)

它展現了一顆導入樹,不包括核心庫。 這個命令被廢棄了,不久會刪除

glide list

這個命令會展現項目導入的全部包的列表,以字母順序。

$ glide list
INSTALLED packages:
	vendor/github.com/Masterminds/cookoo
	vendor/github.com/Masterminds/cookoo/fmt
	vendor/github.com/Masterminds/cookoo/io
	vendor/github.com/Masterminds/cookoo/web
	vendor/github.com/Masterminds/semver
	vendor/github.com/Masterminds/vcs
	vendor/github.com/codegangsta/cli
	vendor/gopkg.in/yaml.v2

glide help

打印幫助信息。

$ glide help

glide --version

打印版本信息。

$ glide --version
glide version 0.12.0

glide.yaml

詳細文檔見 https://glide.sh/docs/glide.yaml

相關文章
相關標籤/搜索