如何设置 GOPRIVATE 环境变量
Posted
技术标签:
【中文标题】如何设置 GOPRIVATE 环境变量【英文标题】:How to set GOPRIVATE environment variable 【发布时间】:2020-02-06 21:00:00 【问题描述】:我开始从事 Go
项目,它使用来自 Github 私有 repos 的一些私有模块,每当我尝试运行 go run main.go
时,它都会给我下面的 410 Gone
错误:
验证 github.com/repoURL/go-proto@v2.86.0+incompatible/go.mod: github.com/repoURL/go-proto@v2.86.0+incompatible/go.mod: 阅读https://sum.golang.org/lookup/github.com/!repoURL/go-proto@v2.86.0+incompatible: 410走了
我可以轻松地从终端克隆私人仓库,这意味着我的 ssh
密钥配置正确。我读到here 我需要设置GOPRIVATE
环境变量,但我不知道该怎么做。
任何人都可以回答或指向相关教程吗?
Go: v1.13,操作系统: macOS Mojave
【问题讨论】:
有一个 go help:go help module-private
或者只是为了让生活更轻松,export GOPRIVATE=*
这是一个很好的问题。
我想问如何在导出 GOPRIVATE 时添加多个路径。我试过export GOPRIVATE="github.com/repo01;gitlab.com/repo02"
但没有用。但是,在查看了@Jay 的评论后,我尝试了export GOPRIVATE=*
,它就可以正常工作????顺便说一句,我认为现在的 go 帮助正在转移到 go help private
@PikoMonde 是的,可以,或者使用逗号作为分隔符。
【参考方案1】:
简答:
go env -w GOPRIVATE=github.com/repoURL/private-repo
或
如果您想允许来自您的组织的所有私有存储库
go env -w GOPRIVATE=github.com/<OrgNameHere>/*
长答案:
查看"Module configuration for non-public modules"了解更多信息:
GOPRIVATE 环境变量控制 go 命令认为哪些模块是私有的(不能公开使用),因此不应使用代理或校验和数据库。该变量是以逗号分隔的模块路径前缀的 glob 模式列表(在 Go 的 path.Match 的语法中)。例如,
GOPRIVATE=*.corp.example.com,rsc.io/private
使 go 命令将路径前缀匹配任一模式的任何模块视为私有模块,包括 git.corp.example.com/xyzzy、rsc.io/private 和 rsc.io/private/quux。
。 .
“go env -w”命令(参见“go help env”)可用于为将来的 go 命令调用设置这些变量。
ssh使用注意事项:
如果您使用 ssh 访问 git repo(本地托管),您可能需要将以下内容添加到您的 ~/.gitconfig
:
[url "ssh://git@git.local.intranet/"]
insteadOf = https://git.local.intranet/
让go
命令能够访问 git 服务器。
【讨论】:
谢谢!现在工作,所以诀窍是使用通配符 url 和组织名称。go env -w GOPRIVATE=github.com/OrgNameHere/*
对于主要使用私人代码export GOPRIVATE=*
进行编码的人来说可能更容易
使用 export GOPRIVATE=*
会将当前目录中的所有文件名分配给 GOPRIVATE,这不是您想要的。
这是一个很好的答案。谢谢你的回答。我喜欢这个答案。
我现在仍然喜欢这个答案,并且可能会继续喜欢它很长一段时间。也许几年。【参考方案2】:
只是对 ssh 用法的跟进,这是用于使其工作的命令:
GitHub:
git config --global url."git@github.com:".insteadOf "https://github.com/"
比特桶:
git config --global url."git@bitbucket.org:".insteadOf "https://bitbucket.org/"
【讨论】:
以上是关于如何设置 GOPRIVATE 环境变量的主要内容,如果未能解决你的问题,请参考以下文章