3

我正在努力为 go 包设置本地 Mercurial 存储库。

所有 mercurial 包目录都可以位于以下 url 下:

https://server.example.com/go-packages/

我可以通过以下方式克隆一个包:

hg clone https://server.example.com/go-packages/packagename

这很好用。

当我想用go命令行安装包时:

go get server.example.com/go-packages/packagename

我收到以下错误:

package server.example.com/go-packages/packagename: unrecognized import path "server.example.com/go-packages/packagename"

但是当我按照http://golang.org/cmd/go/中的说明进行操作时:

go get server.example.com/go-packages/packagename.hg

它完美地工作。

在上面的文件中,他们谈到了一个<meta>标志。所以我用以下条目创建了一个 index.html:

<html>
    <head>
        <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
        <meta name="go-import" content="import-prefix hg repo-root">
        <title>packagename</title>
    </head>
    <body>
        <h1>packagename</h1>
    </body>
</html>

更新:

当我这样做时,wget -O- https://server.example.com/go-packages/packagename/?go-get=1 --no-check-certificate我得到:

!DOCTYPE HTML>
<html>
    <head>
        <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
        <meta name="go-import" content="import-prefix hg repo-root">
        <title>packagename</title>
    </head>
    <body>
        <h1>packagename</h1>
    </body>
</html>

更新 2

我看到,我的内容是错误的(复制粘贴错误),现在我将其更改为:

<html>
    <head>
        <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
        <meta name="go-import" content="server.example.com/go-packages/packagename hg https://server.example.com/go-packages/packagename" />
        <title>packagename</title>
    </head>
    <body>
        <h1>packagename</h1>
    </body>
</html>

go-packages包含 mercurial 存储库的目录在哪里packagename

但仍然go get server.example.com/go-packages/packagename无法正常工作。

4

1 回答 1

4

在查看了这个问题(以及附加的代码审查)和这个线程之后:

  • 确保您的“import-prefix hg repo-root”格式正确
    • import-alias-prefix 必须是使用“ go get”获取的包的前缀或完全匹配。
    • full-repo-root 必须是包含方案但不包含“ .vcs”限定符的存储库的完整 URL 根。
    • vcs是“ ” git、“ hg”、“ svn”等之一。
  • 确保从中获取的页面https://<import>?go-get=1 确实是您的index.html页面(不是index.htm或任何其他DirectoryIndex指令,httpd.conf例如,如果这是在文件中设置的)

如果 import-alias-prefix 与导入不完全匹配,则在声明的根(不需要是域的根)处执行另一个 HTTP 提取

例如,假设 " camlistore.org/pkg/blobref" 在其 HTML 头中声明:

<meta name="go-import" content="camlistore.org git https://camlistore.org/r/p/camlistore" />

... 然后:

$ go get camlistore.org/pkg/blobref

...查看以下 URL:

https://camlistore.org/pkg/blobref?go-get=1
http://camlistore.org/pkg/blobref?go-get=1
https://camlistore.org/?go-get=1
http://camlistore.org/?go-get=1

最终,它在根 ( camlistore.org/) 处找到相同的go-import

<meta name="go-import" content="camlistore.org git https://camlistore.org/r/p/camlistore" />

...并继续信任它,在磁盘上//camlistore.org/r/p/camlistore “”的导入路径中检查 git。camlistore.org

于 2012-09-13T11:00:13.747 回答