如何通过 SSH 使用 mercurial 导入?

Fra*_*844 2 mercurial go

是否可以通过 ssh 使用 mercurial 导入模块?

我发现在 go 中使用 mercurial 的情况很少,而我发现的很少使用 http。

tor*_*rek 5

简短的回答是肯定的。

由 显示go help importpath在此处可用的文本描述了如何设置导入路径以暗示特定的版本控制系统。一些站点是预先知道的:

一些常见的代码托管站点有特殊的语法:
[列表被截断,但 GitHub 暗示使用 Git 协议,Launchpad 暗示 Bazaar,等等]

对于托管在其他服务器上的代码,导入路径可以使用版本控制类型进行限定,或者 go 工具可以通过 https/http 动态获取导入路径,并从 HTML 中的 <meta> 标记中发现代码所在的位置。

因此,如果您无权访问或控制此类<meta>标签,则应使用明确指定的 VCS 导入:

...表单的导入路径

repository.vcs/path
Run Code Online (Sandbox Code Playgroud)

使用命名的版本控制系统指定给定的存储库,带或不带 .vcs 后缀,然后是该存储库中的路径。

也就是说,要告诉go get它必须使用 Mercurial 协议来托管,example.com您可能会使用:

import "example.com/me.hg/repo"
Run Code Online (Sandbox Code Playgroud)

或者:

import "example.com/me/repo.hg"
Run Code Online (Sandbox Code Playgroud)

其中.hg是暗示使用 Mercurial 的原因。

一旦你选择了一个特定的 VCS,事情就会变得有点棘手:

当一个版本控制系统支持多种协议时,下载时会依次尝试每个协议。例如,Git 下载尝试 https://,然后 git+ssh://。

Go VCS 导入器的源代码有详细信息。Mercurial 存储库导入https首先尝试,然后ssh.

如果可以使用<meta>标签,可以提供更多的细节,这样就可以避免.hg导入路径中的相对笨拙:

如果导入路径不是已知的代码托管站点并且也缺少版本控制限定符,则 go 工具会尝试通过 https/http 获取导入并在文档的 HTML <head> 中查找 <meta> 标记。

如果您正在实现对<meta>请求页面的响应,请阅读所有其余内容,因为接下来说:

当使用模块时,go-import 元标记的一个附加变体被识别,并且比那些列表版本控制系统更受欢迎。该变体使用“mod”作为内容值中的 vcs,如下所示:

<meta name="go-import" content="example.org mod https://code.org/moduleproxy">
Run Code Online (Sandbox Code Playgroud)

此标记表示从 URL https://code.org/moduleproxy提供的模块代理中获取路径以 example.org 开头的模块。有关代理协议的详细信息,请参阅“go help goproxy”。