go - 使用 go get 要求 WSL 2 上的私有(private) github 存储库的依赖项

标签 go github wsl-2 git-credential-manager go-get

我正在 Windows 10 上尝试 WSL 2,到目前为止进展顺利,但我已经努力了 2 周才完成这项工作,因为由于某种原因 go get 没有使用或无法使 Git 凭据管理器提示输入我的凭据。

我按照此博客使用 GCM 设置 WSL2 https://www.edwardthomson.com/blog/git_credential_manager_with_windows_subsystem_for_linux.html

它对于大多数日常任务(例如克隆、读取和写入)都非常有效。但是当使用 go get 时,我收到此错误。

go get <remote github repo>@<latest commit id>
go: <remote github repo> 681dceefc81203e094872401c184d038090d6049 => v0.0.17-0.20200501212733-681dceefc812
go get: <remote github repo>@v0.0.17-0.20200501212733-681dceefc812/go.mod: verifying module: <remote github repo>@v0.0.17-0.20200501212733-681dceefc812/go.mod: reading https://sum.golang.org/lookup/<remote github repo>@v0.0.17-0.20200501212733-681dceefc812: 410 Gone
        server response:
        not found: <remote github repo>@v0.0.17-0.20200501212733-681dceefc812: invalid version: git fetch -f origin refs/heads/*:refs/heads/* refs/tags/*:refs/tags/* in /tmp/gopath/pkg/mod/cache/vcs/232ff028cb2fdebd254e30bfc612843483f0fe3fbeb18d5fc8fb4b20f21c9021: exit status 128:
                fatal: could not read Username for 'https://github.com': terminal prompts disabled

已经尝试过 ssh-keys 和此处提出的解决方案 go get results in 'terminal prompts disabled' error for github private repo

但错误仍然相同,启用 env GIT_TERMINAL_PROMPT=1 时什么也没有发生,我猜这是因为 WSL 2 没有执行此操作的权限。无论如何我也尝试过这个工具https://github.com/microsoft/Git-Credential-Manager-for-Mac-and-Linux并通过为纯凭证存储设置变量,它会在终端中提示输入凭证。但我使用 2FA,因为它是组织要求的,并且提示只要求输入用户名和密码,因此身份验证失败。

所以我必须联系一位正在使用 Mac 的 friend 。他能够go get影响go.mod的依赖项,进行提交并推送更改,以便我可以拉取它并从那里继续。但当然这并不理想,而且他没有任何问题,他使用 osxkeychain 来管理他的 git 凭证。

有人遇到过这个问题吗?或者知道如何解决?提前非常感谢您。

最佳答案

Go 无法理解某些模块是私有(private)的,并且不应根据 Go 的校验和库验证它们的校验和。以下错误来自于此

verifying module: <remote github repo>@v0.0.17-0.20200501212733-681dceefc812/go.mod: reading https://sum.golang.org/lookup/<remote github repo>@v0.0.17-0.20200501212733-681dceefc812: 410 Gone

如果可能,至少使用 1.13 或更高版本。 Go 引入了一个名为 GOPRIVATE 的环境变量, GONOPROXYGONOSUMDB为了更好地管理私有(private)模块。向 Go 发出信号表示您正在导入私有(private)存储库的最简单方法是使用 GOPRIVATE 。将私有(private)仓库的模式设置为GOPRIVATE env 变量来抑制校验和验证和 GOPROXY 的使用。下面的示例避免了该层次结构中所有存储库的校验和:

GOPRIVATE=github.com/<your org>/*

查看答案 herehere 。您还可以go help module-private寻求帮助。

关于go - 使用 go get 要求 WSL 2 上的私有(private) github 存储库的依赖项,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61617253/

相关文章:

git - Code::blocks IDE 和 GitHub 集成

c# - 需要 Squirrel.Windows Update Manager.GitHub Update Manager Assistant

visual-studio-code - VSCode 打开缓慢

windows - WSL2 的 MongoDB Compass 问题

sbt - 从 wsl2 ubuntu 启动 sbt 时出现 "sbt server is already booting."错误

go - 如何查看 runtime.futex 的来源?它只有 "System"作为父级

Github 网络图看起来像地铁图

javascript - 解码从 Javascript 发送到 golang 服务器的 JSON

Go:抽象可迭代

google-app-engine - 由于版本 google.golang.org/appengine 已过时,如何导入 Golang Appengine 的 github 版本?