"如何获得"了解用于远程回购的版本控制系统?

时间:2016-11-28 06:29:47

标签: go

我是golang的新手。我了解到go get是一个包管理器,并与各种版本控制系统联系远程回购。

因此,给定包导入路径,go get如何决定使用哪个VCS?我总是在reqeust中看到下面的查询字符串:

?go-get=1

所以这里似乎有一些协议/惯例?

1 个答案:

答案 0 :(得分:5)

关于Go的一个好处是,一切都在,好吧,Go :-)包括几乎所有的标准库和工具。

cmd/go/vcs.go中,我们可以看到这是如何完成的,并在cmd/go/alldocs.go中记录了它。

具体来说,请看repoRootForImportPath

// repoRootForImportPath analyzes importPath to determine the
// version control system, and code repository to use.
func repoRootForImportPath(importPath string, security securityMode) (*repoRoot, error) {

这是做什么的:

  1. vcsPaths包含"已知主机的静态列表"。对于某些人(例如GitHub),这很容易,我们可以设置VCS。对于其他人(例如BitBucket),使用回调函数检查URL以查看可以使用哪个回购。

  2. 如果失败,它会尝试查看" VCS扩展程序"在路径中,例如example.com/foo.gitexample.com/foo.git/dir

  3. 最后go get会查找go-import元标记,如下所示:

    <meta name="go-import" content="example.com/path git https://github.com/Example/repo.git">
    

    另见parseMetaGoImports()Vanity Imports with Hugo是关于如何使用它的一个很好的介绍。

  4. 没有真正的&#34;自动检测&#34;机制。因此,如果您的回复生活在https://example.com/stuff,那么go get example.com/stuff工作。您需要扩展程序或元标记。

    添加了go-get=1参数,以便网站构建者可以轻松查看这是来自go get的请求,这在某些情况下可能很有用。