showliuzp 2025-10-29 14:20 采纳率: 84.3%
浏览 8
已结题

go mod tidy gitlab组里的私有仓库拉取报错

//go mod配置
require gitlab.sludev.shop/client/golang/im_client v0.0.1

replace gitlab.sludev.shop/client/golang/im_client => gitlab.sludev.shop/client/golang/im_client.git v0.0.1

go env配置:
GOINSECURE='gitlab.sludev.shop'
GONOPROXY='gitlab.sludev.shop'
GONOSUMDB='gitlab.sludev.shop'
GOPRIVATE='gitlab.sludev.shop'
GOPROXY='https://proxy.golang.org,direct'

仓库拉取配置:
[url "https://oauth2:xx@gitlab.sludev.shop"]
        insteadOf = https://gitlab.sludev.shop


# cd /home/x/.cache/go-mod; git ls-remote git://gitlab.sludev.shop/client/golang/im_client
fatal: 无法连接到 gitlab.ludev.shop:
gitlab.ludev.shop[0: 172.67.144.217]: errno=连接超时
gitlab.ludev.shop[1: 104.21.47.55]: errno=连接超时
gitlab.ludev.shop[2: 2606:4700:3034::ac43:90d9]: errno=网络不可达
gitlab.ludev.shop[3: 2606:4700:3033::6815:2f37]: errno=网络不可达

将git ls-remote git://gitlab.sludev.shop/client/golang/im_client换成git ls-remote https://gitlab.sludev.shop/client/golang/im_client,是可以有结果的,我的疑问:为什么默认走git://协议,我怎么才能让她走https,并且能拉取gitlab组里的私有仓库

  • 写回答

4条回答 默认 最新

  • 宝码香车 优质创作者: JavaScript技术领域 2025-10-29 14:29
    关注

    让【宝码香车】来帮您解答,本回答参考DeepSeek编写,并整理提供。

    如果答案让您满意,请采纳、点赞、关注,非常感谢!
    .
    每日一句正能量,让它带给您好心情:努力不是为了让别人看见,而是为了对得起自己。
    .

    根据你的问题描述,这是一个典型的 Go modules 拉取 GitLab 私有仓库时的协议配置问题。我来为你详细分析并提供解决方案。

    问题分析

    从错误信息可以看出,go mod tidy 默认使用了 git:// 协议来拉取代码,但你的 GitLab 仓库需要通过 HTTPS 协议访问。

    解决方案

    1. 配置 Git 全局协议替换

    在你的 Git 全局配置中,将 git:// 协议替换为 https://

    git config --global url."https://".insteadOf git://
    

    这个配置会告诉 Git 将所有 git:// 开头的 URL 自动转换为 https://

    2. 验证 Git 配置

    检查当前的 Git 配置:

    git config --global --list | grep insteadof
    

    应该能看到类似这样的配置:

    url.https://.insteadof=git://
    

    3. 配置 Go 环境变量(补充)

    你的 Go 环境变量配置基本正确,但建议补充:

    # 设置私有仓库,不通过代理和校验
    export GOPRIVATE='gitlab.sludev.shop'
    
    
    # 可选:明确设置不安全的仓库(对于自签名证书等情况)
    export GOINSECURE='gitlab.sludev.shop'
    
    
    # 可选:明确设置不使用代理和校验的仓库
    export GONOPROXY='gitlab.sludev.shop'
    export GONOSUMDB='gitlab.sludev.shop'
    

    4. 完整的 Git 凭证配置

    确保你的 Git 凭证配置正确:

    git config --global credential.helper store
    

    或者在 ~/.gitconfig 中配置:

    [url "https://oauth2:your_token@gitlab.sludev.shop"]
        insteadOf = https://gitlab.sludev.shop
    [url "https://"]
        insteadOf = git://
    

    5. 清理缓存并重试

    清理 Go modules 缓存后重新拉取:

    # 清理缓存
    go clean -modcache
    
    
    # 重新拉取依赖
    go mod tidy
    

    验证配置

    测试 Git 拉取是否正常工作:

    # 测试 HTTPS 协议拉取
    git ls-remote https://gitlab.sludev.shop/client/golang/im_client
    
    
    # 测试转换后的 git:// 协议
    git ls-remote git://gitlab.sludev.shop/client/golang/im_client
    

    现在第二个命令应该也能正常工作了,因为 Git 会自动将其转换为 HTTPS 协议。

    总结

    问题的根本原因是 Go modules 在某些情况下会优先使用 git:// 协议,而你的 GitLab 仓库只支持 HTTPS 访问。通过配置 Git 的协议替换,可以强制使用 HTTPS 协议,从而解决连接超时的问题。

    配置完成后,go mod tidy 应该能够正常拉取 GitLab 组内的私有仓库了。

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(3条)

报告相同问题?

问题事件

  • 系统已结题 11月7日
  • 已采纳回答 10月30日
  • 创建了问题 10月29日