我从浏览器中使用Github UI创建了私人回购示例站点/myprivaterepo。

然后我进入我的go目录(在桌面上)并克隆它:

$ cd $GOPATH
$ go get github.com/examplesite/myprivaterepo

到目前为止一切顺利。创建文件调度程序。Go,添加到repo,并推送。

$ vim scheduler.go
$ git add scheduler.go
$ git commit
$ git push

的一切很好。但是当我去一台干净的笔记本电脑并试图克隆回购时,我得到了一个错误:

# Now on laptop, which doesn't yet know about the repo
$ cd $GOPATH
$ go get github.com/examplesite/myprivaterepo
# At this point it should ask for my user ID and password ,right? But it doesn't.
# Instead, this error occurs:
cd .; git clone https://github.com/examplesite/myprivaterepo /Users/tom/go/src/github.com/examplesite/myprivaterepo
Cloning into '/Users/tom/go/src/github.com/examplesite/myprivaterepo'...
fatal: could not read Username for 'https://github.com': terminal prompts disabled
package github.com/examplesite/myprivaterepo: exit status 128

为什么我的笔记本电脑讨厌我自己的回购,我怎样才能让它接受它的命运?谢谢。


当前回答

在更改我的凭据后,我面临这个错误终端提示被禁用,迦太基未能更新依赖项并在终端上显示此错误。

我只是做了简单的以下步骤,它开始工作…

从钥匙串访问中删除旧凭据 试图在不同的位置克隆相同的回购。 它要求设置凭据(用户名+密码)。 然后迦太基更新像以前一样工作。

其他回答

这是你的bash_profile:

export GOPRIVATE=github.com/your-organization/*

然后运行:

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

我在windows上有同样的问题“错误:未能执行提示脚本(退出代码1)” 致命:无法读取用户名“https://github.com':没有错误”试图登录到github通过登录对话框。当我取消对话框时,git在命令行中询问我登录名和密码,它工作得很好。

虽然关于在GitHub中使用SSH身份验证有很多答案,但这个问题与go模块的正确用法有关。为此,卢娜·洛夫古德给出了正确的答案。

重申一下,默认情况下Go会尝试使用公共存储库来下载包。我们需要指定它使用SSH进行私有回购的身份验证。要做到这一点,可以使用以下方法:

go env -w GOPRIVATE=github.com/{your-username}/{your-lib}
.
.
go mod vendor     # this will now work for your private lib

Glob模式也可以工作,因此如果您有多个私有存储库,您可以添加

go env -w GOPRIVATE=github.com/{your-username}/*

编辑:措辞正确。

它会抱怨,因为它需要使用ssh而不是https,但你的git仍然配置了https。所以基本上就像前面提到的,你需要启用提示或者配置git使用SSH而不是https。一个简单的方法来做到这一点通过运行以下:

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

或者如果你已经在你的机器上使用了SSH和git,你可以安全地编辑~/。Gitconfig并在最底部添加以下行

注意:这涵盖了所有SVC,源代码版本控制,这取决于你到底使用什么,github, gitlab, bitbucket)

# Enforce SSH
[url "ssh://git@github.com/"]
  insteadOf = https://github.com/
[url "ssh://git@gitlab.com/"]
        insteadOf = https://gitlab.com/
[url "ssh://git@bitbucket.org/"]
  insteadOf = https://bitbucket.org/

如果要禁用密码提示符,则需要缓存密码。有关如何在mac, windows或linux上缓存您的github密码的更多信息,请访问此页面。 有关如何将ssh添加到您的github帐户的更多信息,请访问此页面。

此外,更重要的是,如果这是公司或您自己的私有存储库,您可能需要跳过对此类回购使用代理或校验和数据库,以避免公开它们。

为此,您需要设置GOPRIVATE环境变量,该变量控制go命令认为哪些模块是私有的(不是公开可用的),因此不应该使用代理或校验和数据库。

变量是一个以逗号分隔的模块路径前缀模式列表(与Go的path. match语法相同)。例如,

export GOPRIVATE=*.corp.example.com,github.com/mycompany/*

Or

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

有关如何解决私有包/模块校验和验证问题的更多信息,请阅读本文。 有关go 13模块和新增强的更多信息,请查看go 1.13模块发布说明。

最后一件不要忘记的事情是,你仍然可以配置go get认证和通过https获取,你所需要做的就是在$HOME/.netrc中添加以下一行

machine github.com login USERNAME password APIKEY

对于GitHub帐户,密码可以是个人访问令牌。 有关如何做到这一点的更多信息,请查看Go FAQ页面。

如果你想要更多的支持或帮助,请随时留下评论。

如果你用这个选项配置你的gitconfig,你以后会在克隆GitHub的其他repo时遇到问题

git config --global --add url. "Git@github.com". Instead, "https://github.com/"

相反,我建议您使用这个选项

echo "export GIT_TERMINAL_PROMPT=1" >> ~/.bashrc || ~/.zshrc

不要忘记从您的私有存储库生成一个访问令牌。当提示输入密码时,只需粘贴访问令牌。快乐克隆:)