Go get尝试本地获取而非远程,拉取私有GitLab仓库失败如何解决?
我之前也碰到过一模一样的问题,核心原因是Go模块的配置和Git的URL替换没到位,导致它还在沿用旧的GOPATH模式去本地目录找依赖,而不是正确拉取远程私有仓库。结合你已经确认SSH访问正常的情况,试试下面这几个步骤:
确保启用Go模块模式
首先检查你的项目目录下有没有go.mod文件,如果没有,先执行:go mod init your-project-name这一步是让Go切换到模块依赖管理模式,而不是旧的GOPATH模式——这大概率就是它跑去本地
go/src目录找仓库的原因。配置Git自动替换GitLab的URL为SSH
Go默认会用HTTPS协议去拉取GitLab仓库,但私有仓库用SSH更稳定(你已经确认SSH正常了)。执行下面的全局Git配置命令,让Git自动把HTTPS的GitLab地址替换成SSH地址:git config --global url."git@gitlab.com:".insteadOf "https://gitlab.com/"这样不管Go内部用什么地址请求GitLab,Git都会自动转成SSH方式拉取,避免权限问题,也能正确指向远程仓库。
告诉Go哪些是私有仓库
Go有个GOPRIVATE环境变量,用来指定私有仓库的域名/路径,这样Go就不会去公共模块代理拉取这些仓库,而是直接访问私有仓库。执行:export GOPRIVATE=gitlab.com/repo/db如果你的GitLab下有多个私有仓库,可以用通配符:
export GOPRIVATE=gitlab.com/repo/*。要是想永久生效,把这条命令加到你的shell配置文件里(比如~/.zshrc或~/.bashrc),然后重新加载配置。清除缓存并重新拉取
有时候本地模块缓存会导致奇怪的问题,先清除缓存再拉取:go clean -modcache go get -u gitlab.com/repo/db最后再确认下SSH配置
虽然你说SSH正常,但可以再跑一遍验证命令确保没问题:ssh -T git@gitlab.com如果返回类似
Welcome to GitLab, @YourUsername!的信息,就说明SSH连接完全正常。
按照这些步骤走下来,应该就能解决go get不去远程拉取反而找本地目录的问题了。
内容的提问来源于stack exchange,提问作者mrwnt10

