假设我的整个存储库都在github.com/my_repo和本地文件系统中。源文件导入“github.com/my_repo/pkg”。当我运行go run
时,是否会获取远程文件并将其导入,还是更喜欢本地文件?
如果有一个通用的远程存储库(不是github / launchpad / etc),会更喜欢获取远程存储库还是更喜欢使用本地文件?
答案 0 :(得分:2)
'go run'永远不会从网上取任何东西。执行该操作的唯一Go命令是“go get”。
答案 1 :(得分:1)
根据http://golang.org/doc/code.html#remote
如果工作空间中不存在指定的包,则go将其放在GOPATH指定的第一个工作空间内。 (如果包已经存在,请跳过远程提取,其行为与go install相同。)
或者换句话说:
$GOPATH
go get
并获取它。如果你期待一个特定版本的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
的新格式。