如何在不使用 go get 的情况下安装 Go 应用程序?

How to install a Go app without using go get?

我正在尝试在我的 ubuntu 机器上安装特定版本的 CockroachDB。我按照网站上的指南下载了 ~200MB 后,安装了最新版本:

$ go get -d github.com/cockroachdb/cockroach
$ cd $GOPATH/src/github.com/cockroachdb/cockroach
$ git checkout beta-20170330
$ make install

一个问题是 /src/github.com/cockroachdb/cockroach 是 300MB,而如果我从 GitHub 页面下载最新版本它只有 30MB。为什么?

我用git checkout v0.1-alpha切换到我想要的版本:

warning: unable to rmdir vendor: Directory not empty
Previous HEAD position was f0f5783... Merge pull request #14448 from BramGruneir/vendorsnappy
HEAD is now at 26088f8... Merge pull request #3475 from mrtracy/mtracy/code_review_feedback

但是在 运行ning make install 之后失败了:

github.com/agtorre/gocolorize                      99fea4bc9517 [checkout f42b554bf7f0]
github.com/biogo/store                             913427a1d5e8 [checkout 3b4c041f52c2]
github.com/cockroachdb/c-lz4                       834d3303c9e8 [checkout c40aaae2fc50]
github.com/cockroachdb/c-protobuf                  323984796a7b [checkout 6a18bfcdd516]
github.com/cockroachdb/c-rocksdb                   0dd42399d1f0 [checkout bf15ead80bdc]
github.com/cockroachdb/c-snappy                    c0cd3c9ce92f [checkout 5c6d0932e0ad]
github.com/cockroachdb/yacc                        7c99dfd2164a [get checkout 443154b1852a]
github.com/coreos/etcd                             38a914973544 [checkout 0eb46eb1457b]
github.com/cpuguy83/go-md2man                      a65d4d2de4d5 [get checkout 71acacd42f85]
github.com/docker/docker                           6311e9fc9d34 [get checkout 5e0283effa73]
github.com/elazarl/go-bindata-assetfs              30f82fa23fd8 [checkout d5cac425555c]
github.com/go-sql-driver/mysql                     9dee4ca50b83 [get checkout d512f204a577]
github.com/gogo/protobuf                           c0656edd0d9e [checkout 8658879224bd]
github.com/golang/lint                             cb00e5669539 [get checkout 32a87160691b]
github.com/google/btree                            316fb6d3f031 [checkout cc6329d4279e]
github.com/gordonklaus/ineffassign                 f0c5cfc1817d [get checkout 507e48671a07]
github.com/inconshreveable/mousetrap               76626ae9c91c [get OK]
github.com/jteeuwen/go-bindata                     a0ff2567cfb7 [get OK]
github.com/julienschmidt/httprouter                6f3f3919c878 [checkout f30ab90cccbd]
github.com/kisielk/errcheck                        23699b7e2cbf [get checkout 12fd1ab9811e]
github.com/kisielk/gotool                          0de1eaf82fa3 [get checkout 58a7a198f2ec]
github.com/kr/pretty                               cfb55aafdaf3 [get checkout e6ac2fc51e89]
github.com/kr/text                                 7cafcd837844 [get checkout bb797dc4fb83]
github.com/lib/pq                                  2704adc878c2 [checkout 11fc39a580a0]
github.com/mattn/go-runewidth                      14207d285c6c [checkout d96d1bd051f2]
github.com/mibk/dupl                               3447d9b0cb5a [get checkout 47b66d6a523f]
github.com/montanaflynn/stats                      f8cd06f93c6c [checkout 4dd27fe9ac79]
github.com/olekukonko/tablewriter                  febf2d34b54a [checkout 333c0610de34]
github.com/opennota/check                          11e2eec79ec4 [get checkout 591428223a6a]
github.com/peterh/liner                            88609521dc4b [checkout 4d47685ab2fd]
github.com/rcrowley/go-metrics                     1f30fe9094a5 [checkout 7839c01b09d2]
github.com/robfig/glock                            39b969c32281 [checkout cb3c3ec56de9]
github.com/russross/blackfriday                    5f33e7b78783 [get checkout d18b67ae0afd]
github.com/samalba/dockerclient                    a30362618471 [get checkout 4656b1bc6cbc]
github.com/shurcooL/sanitized_anchor_name          1dba4b3954bc [get checkout 10ef21a441db]
github.com/spf13/cobra                             7aeaa2cce6ae [checkout ee6224d01f6a]
github.com/spf13/pflag                             d16db1e50e33 [checkout 08b1a584251b]
github.com/tebeka/go2xunit                         13c29c7515e6 [get checkout 0519fcc9b45b]
github.com/termie/go-shutil                        bcacb06fecae [get OK]
golang.org/x/crypto                                88915ccf7aeb [checkout 7b85b097bf75]
golang.org/x/net                                   ffcf1bedda3b [checkout 21af302bb527]
golang.org/x/text                                  f4b4367115ec [checkout 00e205363f74]
golang.org/x/tools                                 620ecdb8d794 [checkout 1cdaff4a02c5]
gopkg.in/yaml.v1                                   9f9df34309c0 [OK]
cmd github.com/cockroachdb/c-protobuf/cmd/protoc                [built]
cmd github.com/cockroachdb/cockroach/protoc-gen-gogoroach       [error exit status 2]
github.com/cockroachdb/cockroach/vendor/github.com/gogo/protobuf/protoc-gen-gogo/descriptor
github.com/cockroachdb/cockroach/vendor/github.com/gogo/protobuf/gogoproto
github.com/cockroachdb/cockroach/vendor/github.com/gogo/protobuf/protoc-gen-gogo/plugin
github.com/cockroachdb/cockroach/vendor/github.com/gogo/protobuf/vanity
github.com/cockroachdb/cockroach/vendor/github.com/gogo/protobuf/protoc-gen-gogo/generator
github.com/cockroachdb/cockroach/vendor/github.com/gogo/protobuf/plugin/testgen
github.com/cockroachdb/cockroach/vendor/github.com/gogo/protobuf/plugin/defaultcheck
github.com/cockroachdb/cockroach/vendor/github.com/gogo/protobuf/plugin/embedcheck
github.com/cockroachdb/cockroach/vendor/github.com/gogo/protobuf/plugin/enumstringer
github.com/cockroachdb/cockroach/vendor/github.com/gogo/protobuf/plugin/marshalto
github.com/cockroachdb/cockroach/vendor/github.com/gogo/protobuf/plugin/oneofcheck
github.com/cockroachdb/cockroach/vendor/github.com/gogo/protobuf/plugin/populate
github.com/cockroachdb/cockroach/vendor/github.com/gogo/protobuf/plugin/unmarshal
github.com/cockroachdb/cockroach/vendor/github.com/gogo/protobuf/plugin/compare
github.com/cockroachdb/cockroach/vendor/github.com/gogo/protobuf/plugin/description
github.com/cockroachdb/cockroach/vendor/github.com/gogo/protobuf/plugin/equal
github.com/cockroachdb/cockroach/vendor/github.com/gogo/protobuf/plugin/face
github.com/cockroachdb/cockroach/vendor/github.com/gogo/protobuf/plugin/gostring
github.com/cockroachdb/cockroach/vendor/github.com/gogo/protobuf/plugin/size
github.com/cockroachdb/cockroach/vendor/github.com/gogo/protobuf/plugin/stringer
github.com/cockroachdb/cockroach/vendor/github.com/gogo/protobuf/plugin/union
github.com/cockroachdb/cockroach/vendor/github.com/gogo/protobuf/protoc-gen-gogo/grpc
github.com/cockroachdb/cockroach/vendor/github.com/gogo/protobuf/vanity/command
github.com/cockroachdb/cockroach/protoc-gen-gogoroach
# github.com/cockroachdb/cockroach/protoc-gen-gogoroach
protoc-gen-gogoroach/main.go:12: undefined: vanity.NotInPackageGoogleProtobuf
go install -tags ''  -ldflags '-X "github.com/cockroachdb/cockroach/util.buildTag=alpha-6447-g26088f8" -X "github.com/cockroachdb/cockroach/util.buildTime=2017/04/03 11:46:56" -X "github.com/cockroachdb/cockroach/util.buildDeps=github.com/cockroachdb/c-lz4:c40aaae2fc50293eb8750b34632bc3efe813e23f github.com/cockroachdb/cockroach:26088f81e5ecfb2fd63f8f15f524102c9a0c1c05 github.com/cockroachdb/cockroach/vendor:17711805119083543d94edac10e423260a597426 github.com/julienschmidt/httprouter:f30ab90cccbd5171771d26b6557d3c2f49e047a6 github.com/peterh/liner:4d47685ab2fd2dbb46c66b831344d558bc4be5b9 gopkg.in/yaml.v1:9f9df34309c04878acc86042b16630b0f696e1de"'
# github.com/cockroachdb/cockroach/cli
cli/sql_util.go:148: table.Append(row) used as value
Makefile:71: recipe for target 'install' failed
make: *** [install] Error 2

如果我能安装从 GitHub 下载的特定版本,我将不胜感激,因为它体积更小,结构更简洁。但是它缺少一些文件,例如 .go-version .bootstrapfatal: Not a git repository (or any of the parent directories): .git

go get 是否自己插入这些文件?如何初始化它们?

难道没有更好的方法来做到这一点,而不必每次都额外下载 100MB 运行 make install

使用 go get 下载 cockroachdb 我得到一个大小为 664MB 的 $GOPATH/src/github.com/cockroachdb/cockroach

然后我尝试克隆 cockroachdb 的 github 存储库,它的大小为 304MB,其中大部分是因为 .git 隐藏文件夹为 263MB。

从 github ui 下载一个 zip 文件并解压,我最终得到一个 42MB 的文件夹。

纯 git 克隆的 repo 和 zipfile 版本缺少 vendor folder which you can read about here。它占另外 302MB。当 go get 用于下载 repo 时,文件夹中填充了 cockroachdb 的依赖项(我猜它遵循 link 到 cockroach 的供应商 repo,你可以在 git中心页面)。

因为我是从 master 分支完成的,所以我的尺寸与 v0.1-alpha 版本有点不同。但我猜它对大小差异有类似的原因。

要使用 zip 文件将其下载到 "work",您可以尝试将 zip 文件解压缩到 $GOPATH/src/github.com/cockroachdb/cockroach。然后在该文件夹中执行 git init。然后按照该标记中的自述文件中的说明进行操作,该标记指示您应该 运行 make build。但是,我相信你仍然需要获取一些cockroachdb的依赖项,所以按照官方说明可能会简单得多。

我没试过,但你确定 make install 每次你 运行 都会导致新的下载吗?

I used git checkout v0.1-alpha to switch to the version I want

v0.1-alpha 很古老,肯定不是您想要的(我对它不再构建并不感到惊讶;从那时起我们已经提高了构建过程的可重复性)。最新版本(截至撰写本文时)的形式为 beta-YYYYMMDD

无需 go get 即可安装 CockroachDB binary releases。我们目前正在修改安装说明以使用源代码压缩包而不是 go getgit clone