Go更喜欢从远程存储库获取还是更喜欢使用本地文件?

时间:2013-06-09 23:37:00

标签: go

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

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

3 个答案:

答案 0 :(得分:2)

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

答案 1 :(得分:1)

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

  

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

或者换句话说:

  1. Go将在$GOPATH
  2. 中本地检查包裹
  3. 如果它不存在,Go将调用go get并获取它。
  4. 如果你期待一个特定版本的repo,这是值得注意的:go将获取Go安装版本的最新版本。如果repo没有特定的标签,它将从主分支中获取头部。通常最好在版本控制/文档中注明您需要的repo版本,以确保您不会获得以后(并且可能会破坏)的回购。

答案 2 :(得分:0)

请注意,go get将获取master的HEAD ...并在detached HEAD state中克隆您的回购。
这意味着:如果你想添加一些提交,你可以在" no branch"模式。
在进行自己的任何本地提交之前,首先需要:

git checkout -b master --track origin/master

Git 1.2(2013年第4季度)将改变这一点:见What's happening in Go tip (2013-09-07)

go get用于git存储库

  

相关CL:CL 12923043,遗憾的是我还有一些没有数字。

     

如果你曾经使用过go get git repository然后去查看实际的克隆,你可能已经注意到HEAD处于分离状态,并且每个go get -u都会将它恢复为分离状态,HEAD指向远程分支上的特定提交。

     

即使这在技术上并不是一个问题(你仍然可以检查主分支),但当人们不知道这个事实时,它会导致混乱和偶尔丢失数据。

     

然而,在Go 1.2中,go get将始终创建一个“正确”(如预期的)克隆,并使用活动master分支go get -u将使用git pull及其所有效果,例如在发生冲突或未提交的更改时中止   Go 1.2之前的旧克隆将自动更新为go get -u的新格式。