2

假设我的整个存储库位于 github.com/my_repo 和本地文件系统中。源文件导入“github.com/my_repo/pkg”。当我运行时go run,会去获取远程文件并导入它,还是更喜欢本地文件?

如果有一个通用的远程存储库(不是 github/launchpad/etc),会更喜欢获取远程存储库还是更喜欢使用本地文件?

4

3 回答 3

2

'go run' 从不从网上获取任何东西。执行此操作的唯一 Go 命令是“go get”。

于 2013-06-10T00:17:38.777 回答
1

根据http://golang.org/doc/code.html#remote

如果指定的包不存在于工作空间中,go get 会将其放置在 GOPATH 指定的第一个工作空间中。(如果包已经存在,go get 会跳过远程获取,其行为与 go install 相同。)

或者,换句话说:

  1. Go 将在您的本地检查包$GOPATH
  2. 如果它不存在,Go 将调用go get并获取它。

如果您期待特定版本的存储库,请注意这一点:go 将获取已安装 Go 版本的最新版本。如果 repo 没有特定的标签,它将从 master 分支中获取头部。在版本控制/文档中的某处记下您需要的 repo 版本通常是一个好主意,以确保您不会获得以后(并且可能会破坏)的 repo。

于 2013-06-10T00:22:22.287 回答
0

请注意, 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

于 2013-09-16T08:59:23.363 回答