我在计算机A上开发了一个存储库,并创建了一个我签入的go.mod/go.sum。
我使用计算机 B 上的 go.mod/go.sum 文件拉取该存储库,但是当我尝试构建程序时,无法满足模块约束。
$ go build
go: finding github.ibm.com/kms/key-protect-client v0.1.5
go: finding golang.org/x/tools v0.0.0-20180221164845-07fd8470d635
go: github.ibm.com/kms/key-protect-client@v0.1.5: unknown revision v0.1.5
go: error loading module requirements
失败的存储库是专用存储库,由于某种原因,它不会下载到模块缓存中。在另一台计算机上,将下载依赖项并成功生成。我正在同一个域中构建另一个私有存储库,因此我知道我的 github 凭据使我可以访问这些存储库。但由于某种原因,go 模块系统无法访问依赖存储库。
我找不到有关如何调试此内容的更多信息。
如果您使用的是私有存储库,则可能的解决方案是 golang 未知修订版:
-
git config --global url."ssh://git@yourserver".insteadOf "https://yourserver"
-
检查您的 git 存储库权限
我遇到了同样的问题,请访问链接。
确保您已设置GO111MODULES
go env -w GO111MODULE=on
确保您的 git 配置适用于私有仓库
git config --global url."ssh://git@github.com:acme-corporation".insteadOf "https://github.com/acme-corporation"
如果使用 2FA,请确保创建个人访问令牌
git config --global url."https://:x-oauth-basic@github.com:acme-corporation".insteadOf "https://github.com/acme-corporation"
在我设置后的情况下:
- ~/.gitconfig
- ~/.巴什尔克
我不得不对 ~/.netrc 文件做同样的事情:
machine gitlab.url.com
login <gitlab username>
password <GITLAB_TOKEN>
如果没有任何帮助(请参阅前面的答案(,请使用以下内容:
go get -u
-u 标志指示 get 更新提供依赖关系的模块在命令行上命名以使用较新的次要软件包或修补程序的软件包数量可用时发布。
此外,我建议使用像gobrew这样的版本管理器。您可以轻松地在版本之间切换,因为有时它也可能是与版本相关的问题。
如果这样做,您还可以为tidy
设置兼容版本,例如:
go mod tidy -compat=1.17
现在,您已准备好构建:
go clean --modcache
go get -u
go build
问题与 cmd/go 不知道 git 身份并假设 .gitconfig 文件中只有一个铰接有关。
解决方法:当您需要使用全局 git 身份并处理更新模块文件的 cmd/go 工具时,准备好一组 git 标识来替换全局 .gitconfig。
以防万一得到
"错误":"未知修订..."
或
"错误":"无效版本...">
确保您没有指定 PR(拉取请求(的哈希。即使是合并的 PR 也可能是错误的。
在 github 存储库中查找提交哈希在/commits
下,但不在/pulls
下。
在此处查看更多信息:golang/go#31191 显式过滤掉此类提交。
以防万一,您是否在计算机 B 上的环境变量GOPRIVATE
中添加了"github.ibm.com/kms"
?正是由于这个原因,我遇到了这个错误。
通常原因可能是存储库是私有的,因此您应该首先获得授权。创建 .netrc 文件并包含您的凭据,您可以在此处找到完整的说明。https://www.gnu.org/software/inetutils/manual/html_node/The-_002enetrc-file.html
如果你想构建一个 docker 镜像,你可以使用这个 DockerFile 示例
ENV GOPRIVATE "gitlab.com/yourPrivateRepo"
ARG GO_GET_TOKEN_PASS
ARG GO_GET_TOKEN_LOGIN
RUN touch ~/.netrc &&
chmod 600 ~/.netrc &&
echo "machine gitlab.com login ${GO_GET_TOKEN_LOGIN} password ${GO_GET_TOKEN_PASS}" > ~/.netrc
根据上面的一些评论 - 我遇到了这个问题,因为我的 git 由于更新到 Mojave 而被炸了......这里的高投票响应(xcode-select --install
(让我通过了这个错误消息Git在macOS Mojave Update之后不起作用(xcrun:错误:无效的活动开发人员路径(/Library/Developer/CommandLineTools(
如果您遇到此问题,请确保您的go status
等按预期工作。
在某些情况下,除了在 git 中配置 url-instead Of 配置外,您还必须禁用 GOPROXY
和 GOSUMDB
,如下所示:
$ go env -w GOPROXY=direct GOSUMDB=off
前后运行go env
显示效果。使用上述命令禁用它们将确定这是失败的原因。由于禁用校验和验证存在一些安全问题,因此您可能希望为导入的公共模块保留GOPROXY
和GOSUMDB
。您可以在此处找到有关如何实现此目的的更多信息:
https://jfrog.com/blog/why-goproxy-matters-and-which-to-pick/
就我而言,Go 尝试下载模块的默认位置似乎不包括所需的(旧(修订版。像这样设置 Go 代理环境变量export GOPROXY=https://proxy.golang.org
为我解决了问题。