使用提交哈希时,Go Modules出现“未知修订版”错误

4

我需要将提交拉入我的Go项目。

我尝试了多个版本的go.mod

...

require (
    github.com/libp2p/go-libp2p-core@v0.0.7-0.20190626134135-aca080dccfc2

    // and...
    github.com/libp2p/go-libp2p-core v0.0.0-20190626-aca080dccfc2c9933df66baafe6cf9cc4f429825
)

...

无论是哪种情况,在运行$ go build时都会导致错误:

$ go build
go: finding github.com/libp2p/go-libp2p-core v0.0.0-20190626-aca080dccfc2c9933df66baafe6cf9cc4f429825
go: finding github.com/libp2p/go-libp2p-core v0.0.7-0.20190626134135-aca080dccfc2
go: github.com/libp2p/go-libp2p-core@v0.0.0-20190626-aca080dccfc2c9933df66baafe6cf9cc4f429825: unknown revision v0.0.0-20190626-aca080dccfc2c9933df66baafe6cf9cc4f429825
go: github.com/libp2p/go-libp2p-core@v0.0.7-0.20190626134135-aca080dccfc2: unknown revision aca080dccfc2
go: error loading module requirements

Go getting也不起作用:

$ go get github.com/libp2p/go-libp2p-core@aca080dccfc2c9933df66baafe6cf9cc4f429825
go: finding github.com/libp2p/go-libp2p-core v0.0.7-0.20190626134135-aca080dccfc2                                                                                                    go: github.com/libp2p/go-libp2p-core@v0.0.7-0.20190626134135-aca080dccfc2: unknown revision aca080dccfc2
go: error loading module requirements

@JimB指出,那个哈希值没有合并而是被重新派生了。因此我试图用一个新的哈希值来替换它,但仍然在尝试获取旧的哈希值?

$ go get github.com/libp2p/go-libp2p-core@v0.2.1-0.20190802003216-436d707f7cd0
go: finding github.com/libp2p/go-libp2p-core v0.0.7-0.20190626134135-aca080dccfc2
go: github.com/libp2p/go-libp2p-core@v0.0.7-0.20190626134135-aca080dccfc2: unknown revision aca080dccfc2
go: error loading module requirements

该提交不存在,它没有合并到主分支,被重新基于不同的哈希值,等等。 - JimB
@JimB 很好的发现。我尝试获取一个更新的哈希值,但它仍然在尝试找到我请求的第一个哈希值? - Adam
你的 go.mod 文件里还有无效的吗?也许你在 go.sum 里存储了一些东西?不要试图自己创建伪版本字符串(你的 go.mod 行都不正确)。如果你想要一个特定的提交或分支,请使用 go get 直接获取它。 - JimB
2个回答

6
对于您最新的哈希值aca080dccfc2,它是否已合并到主分支,或该哈希值对应的是什么?从快速查看中,aca080dccfc2似乎未出现在master上,但是我不确定您对该提交的期望是什么。
有关模块允许使用的哈希值存在一些限制,例如来自#27043这篇略旧的评论中:

如果您查看refs/pulls/nnnnn或其他引用,则它存在于Git中, 但不存在于主分支和标签中。 最近的更改将搜索范围缩小到主分支和标记, 这更加合适。

尝试获取aca080dccfc2哈希值对我无效。
$ go get github.com/libp2p/go-libp2p-core@436d707f7cd0
go: finding github.com/libp2p/go-libp2p-core 436d707f7cd0
go get github.com/libp2p/go-libp2p-core@436d707f7cd0: 
 github.com/libp2p/go-libp2p-core@436d707f7cd0: invalid version: unknown revision 436d707f7cd0

另一方面,我最近在master上的提交对我起作用:
$ go get github.com/libp2p/go-libp2p-core@d204016fc64589d0

(旁注:注意,我在@后面只使用了提交哈希。如果伪版本出了问题,这可能会很方便。)
你提到:

它仍然试图获取旧的版本?

我不确定这是否是您主要的问题,但通常,如果您不确定版本来自何处,则一个好的起点是: go mod graph | grep <module-of-interest> 或者在您的情况下: go mod graph | grep go-libp2p-core 从文档中获悉:

'go mod graph' 以文本形式打印模块需求图(应用替换)。输出中的每行都有两个由空格分隔的字段:一个模块和其需求之一。每个模块都被标识为格式为path@version的字符串,除了没有@version后缀的主模块。

对于跟踪特定版本为何被使用的一些更一般的故障排除技巧,在模块wiki上的此FAQ中有一些提示: FAQ:如果我看不到预期的依赖项版本,我可以检查什么? 话虽如此,首先了解您期望的提交可能更有趣...

谢谢您的热情回复!我试图获取那个commit,因为它在我正在开发的项目的go.mod文件中指定了。最终,我拉取了最新的分支并更新了go.mod文件。谢谢! - Adam

2
你可以尝试这个小技巧来解决问题:
go.modgo.sum 文件中删除 github.com/libp2p/go-libp2p-core v0.0.7-0.20190626134135-aca080dccfc2 的条目。
然后尝试运行 go get "github.com/libp2p/go-libp2p-core@v0.2.1-0.20190802003216-436d707f7cd0",这将下载指定版本。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接