如何修复私有仓库中"go get"命令出现的"invalid version"和"could not read Username"错误?

36

我想在另一个GoLang项目中使用托管在GitHub上的私有仓库。

我做了以下几步:

  1. 在我的GitHub帐户设置中创建了一个私人访问令牌
  2. 然后执行以下命令:

    git config --global url."https://xxxxxx:ACCESS_TOKEN@github.com".insteadOf "https://github.com"

将“xxxxxx”替换为我的真实GitHub用户名,然后是适当的ACCESS_TOKEN。

  1. go get github.com/private/repo

然而,我总是得到以下错误:

go: downloading github.com/xxxxxxxx/yyyyyyyyy-go-sdk v0.0.0-20200307154628-cbcb73911013
go get github.com/xxxxxxxx/yyyyyyyyy-go-sdk: github.com/xxxxxxxx/yyyyyyyyy-go-sdk@v0.0.0-20200307154628-cbcb73911013: verifying module: github.com/xxxxxxxx/yyyyyyyyy-go-sdk@v0.0.0-20200307154628-cbcb73911013: reading https://sum.golang.org/lookup/github.com/xxxxxxxx/yyyyyyyyy-go-sdk@v0.0.0-20200307154628-cbcb73911013: 410 Gone
    server response:
    not found: github.com/xxxxxxxx/yyyyyyyyy-go-sdk@v0.0.0-20200307154628-cbcb73911013: invalid version: git fetch -f origin refs/heads/*:refs/heads/* refs/tags/*:refs/tags/* in /tmp/gopath/pkg/mod/cache/vcs/5eca4f397ed3a418f58ee864965ed24936e21268780304d6941f5b3983d31ad1: exit status 128:
        fatal: could not read Username for 'https://github.com': terminal prompts disabled

我也尝试了以下方法:

GONOSUMDB=github.com/myusername go get github.com/xxxxxx/yyy...

根据 StackOverflow 上类似问题的一些答案,我尝试在 repo-url 后面添加 ".git"。但这根本行不通。

这可能是什么问题,我该如何解决?

版本:

♠ git --version
git version 2.25.0
hub version 2.14.2

♠ Go版本1.14

3个回答

103

你做得几乎都对了,只是忘记了一个重要的步骤。

你需要告诉Go不要检查校验和,因为你正在操作自己的私有仓库:

    go env -w GOPRIVATE=github.com/mycompany/*

mycompany替换为您在Github上的用户名或公司名称,go get很可能会按预期工作。


27
到目前为止(耗时2个多小时,由一位经验丰富的谷歌搜索用户进行搜索),在任何文章、文档或stack overflow答案中都没有人提到这一点,这是一个笑话,需要这样做。 - Callam Delaney
2
如果您查看本教程的第5点,它将教授有趣的"go mod edit -replace"命令,该命令告诉Go在本地搜索自己的模块。 https://golang.org/doc/tutorial/call-module-code - Brice
13
我必须添加引号,以防止我的Shell(zsh)尝试扩展通配符模式(*):go env -w "GOPRIVATE=github.com/mycompany/*" - Brian McKelvey
如果这个答案中有一个交叉引用,指向描述正在配置的机器的golang文档,那将是很好的:为什么和如何。 - Ravenwater
其他文章都没有提到这个小细节,而对我来说,缺少的是通配符。呃,我至少花了3个小时来尝试弄清楚这些东西。谢谢。 - Firmino Changani

18

我有一个可能会有所帮助的解决方案。此问题发生在 Golang 版本 1.13 以上。当我们在项目中使用私有模块时会出现此问题。由于 Go Get 命令的运行,Golang 将执行代理校验和。因此,另一种选择是您需要在环境中添加 GOPRIVATE 环境变量。

export GOPRIVATE="github.com/private/repo"

或者如果它不起作用,可以尝试在GONOPROXY环境中添加。

export GONOPROXY="github.com/private/repo"

2
对我来说,将这两个答案结合起来起作用了。 - Asim

4

这可能对其他人有所帮助,但我在一个公共仓库上得到了这个错误。我运行了go clean -modcache之后就可以拉取了。不太确定问题是什么,但可能是本地缓存中的一些sha提交冲突。


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