如何修复Go Mod Unknown Revision
在介绍 Go mod 之后,我们可能已经使用过 Go 模块和私有存储库。 在处理使用新的 Go 模块包管理和版本控制系统的 Go 项目并专门使用公共包时,我们通常不会遇到任何重大问题。
但是,当尝试将 Go 包导入私有存储库时,我们可能会在运行 Go build
或 Go modules
命令时遇到问题。 我们可能会看到如下问题:
$ go build
go: github.com/acme-corporation/internal-rpc-client@v0.1.5: unknown revision v0.1.5
如果你遇到过类似的错误,那么你并不孤单。 这意味着 Go 模块无法正确访问私有包。
访问私有仓库时如何解决Go mod unknown revision
1. 确保你已经设置了 GO111MODULE
确保你正确使用 Go 模块,这会告诉 Go 使用 Go 模块,以防你运行的是旧版本或 Go,或者错误地禁用了 Go 模块。 这是运行后续步骤所必需的。关于这个问题可以参考我们的 go语言:环境变量GOPROXY和GO111MODULE设置 文章
$ go env -w GO111MODULE=on
2. 将你的组织私有仓库添加到 GOPRIVATE
Go 团队正确地考虑了在使用 Go mod
时使用私有包的可能性,并创建了一个帮助工具来描述这种情况
go help module-private
The go command defaults to downloading modules from the public
Go module mirror at proxy.golang.org. It also defaults
to validating downloaded modules,regardless of source,
against the public Go checksum database at sum.golang.org.
These defaults work well for publicly available source code.
The GOPRIVATE environment variable controls which modules
the go command considers to be private (not available publicly)
and should therefore not use the proxy or checksum database.
The variable is a comma-separated list of glob patterns
(in the syntax of Go's path.Match) of module path prefixes.
For example,
GOPRIVATE=*.corp.example.com,rsc.io/private
因此,下一步应该如下所示,使用 GOPRIVATE
环境变量将我们的私有存储库设置为“private”
$ go env -w GOPRIVATE=github.com/acme-corporation/internal-rpc-client
3. 确保您的 git 配置适用于私有存储库
Go mod 在后台使用 git 来检索远程包信息。 因此,你应该通过更新 git 配置来告诉 git 如何访问私有包
$ git config --global url."ssh://git@github.com:acme-corporation".insteadOf "https://github.com/acme-corporation"
这将允许我们的 git 客户端和 Go mod 使用我们的 ssh 密钥访问 github 并进行身份验证并访问私有存储库
4. 如果使用 2FA,请确保创建个人访问令牌
在 github 中,特别是如果你为你的组织使用 2FA
,在这种情况下使用你的 ssh 密钥将不起作用,你将不得不创建一个个人访问令牌并使用它来访问你的私有存储库
$ git config --global url."https://:x-oauth-basic@github.com:acme-corporation".insteadOf "https://github.com/acme-corporation"
相关文章
在 Golang 中使用 If-Else 和 Switch Loop Inside HTML 模板
发布时间:2023/04/27 浏览次数:65 分类:Go
-
本篇文章介绍了在 Golang 的 HTML 模板中使用 if-else 和 switch 循环。因此,只要输出是 HTML,就应该始终使用 HTML 模板包而不是文本模板。
Golang 中的零值 Nil
发布时间:2023/04/27 浏览次数:166 分类:Go
-
本篇文章介绍 nil 在 Golang 中的含义,nil 是 Go 编程语言中的零值,是众所周知且重要的预定义标识符。
Golang 中的 Lambda 表达式
发布时间:2023/04/27 浏览次数:93 分类:Go
-
本篇文章介绍如何在 Golang 中创建 lambda 表达式。Lambda 表达式似乎不存在于 Golang 中。 函数文字、lambda 函数或闭包是匿名函数的另一个名称。
在 Go 中使用断言
发布时间:2023/04/27 浏览次数:181 分类:Go
-
本篇文章介绍了 assert 在 GoLang 中的使用。在 Go 语言中使用断言:GoLang 不提供对断言的任何内置支持,但我们可以使用来自 Testify API 的广泛使用的第三方包断言。
Go 中的随机数生成
发布时间:2023/04/27 浏览次数:114 分类:Go
-
本篇文章介绍如何在 Go 语言中使用随机数生成功能。Go 中的随机数生成 Go 语言为随机数生成功能提供内置支持。 内置包 math 有方法 rand(),用于随机数生成。
在 Go 中使用 Electron API 创建 GUI
发布时间:2023/04/27 浏览次数:124 分类:Go
-
本篇文章介绍如何在 Go 语言中使用 Electron API 创建 GUI。Electron API 或 Astilectron 用于为 GoLang 创建 GUI。
在 GoLang 中安装包
发布时间:2023/04/27 浏览次数:122 分类:Go
-
使用 Go 语言的 get 命令安装所需的包非常容易。 Go 语言提供了多种命令来执行某些任务,get 就是其中之一。