假设我的整个存储库位于 github.com/my_repo 和本地文件系统中。源文件导入“github.com/my_repo/pkg”。当我运行时go run
,会去获取远程文件并导入它,还是更喜欢本地文件?
如果有一个通用的远程存储库(不是 github/launchpad/etc),会更喜欢获取远程存储库还是更喜欢使用本地文件?
假设我的整个存储库位于 github.com/my_repo 和本地文件系统中。源文件导入“github.com/my_repo/pkg”。当我运行时go run
,会去获取远程文件并导入它,还是更喜欢本地文件?
如果有一个通用的远程存储库(不是 github/launchpad/etc),会更喜欢获取远程存储库还是更喜欢使用本地文件?
'go run' 从不从网上获取任何东西。执行此操作的唯一 Go 命令是“go get”。
根据http://golang.org/doc/code.html#remote
如果指定的包不存在于工作空间中,go get 会将其放置在 GOPATH 指定的第一个工作空间中。(如果包已经存在,go get 会跳过远程获取,其行为与 go install 相同。)
或者,换句话说:
$GOPATH
go get
并获取它。如果您期待特定版本的存储库,请注意这一点:go 将获取已安装 Go 版本的最新版本。如果 repo 没有特定的标签,它将从 master 分支中获取头部。在版本控制/文档中的某处记下您需要的 repo 版本通常是一个好主意,以确保您不会获得以后(并且可能会破坏)的 repo。
请注意, go get 将获取master
... 的 HEAD 并将您的 repo 克隆为分离的 HEAD状态。
这意味着:如果您想添加一些提交,您可以在“无分支”模式下进行。
在您自己进行任何本地提交之前,您首先需要:
git checkout -b master --track origin/master
Git 1.2(2013 年第四季度)将改变这一点:请参阅Go 提示 (2013-09-07) 中发生了什么:
go get
对于 git 存储库相关 CL:CL 12923043,不幸的是我没有更多的数字。
如果你曾经在 git 存储库上使用过 go get ,后来又查看了实际的克隆,你可能已经注意到 HEAD 处于分离状态,并且每个
go get -u
人都会将其重新置于分离状态,HEAD 指向特定的提交在远程分支上。即使这在技术上不是问题(您仍然可以只检查 master 分支),但当人们不知道这一事实时,它会导致混乱和偶尔丢失数据。
然而,在 Go 1.2 中,go get 将始终创建一个“正确的”(如预期的)克隆,具有一个活动的
master
分支,go get -u
并将使用 git pull 及其所有效果,例如在发生冲突或未提交的更改时中止。
Go 1.2 之前的旧克隆将自动更新为新格式go get -u
。