Go语言中,公司gitlab私有仓库依赖拉取配置

为什么要考虑私有仓库

Go语言目前都已经采用了官方统一的 go modules 来管理依赖,后续也不太可能出现比较乱的生态, 因此了解下如何让这个依赖管理正常工作是非常必要的。

对于Github或者其他公有仓库,依赖管理是非常直接和方便的,设置好GOPROXY后,使用 go get去直接操作依赖,是不会报错的,很方便直接, 但是对于一些公司或者组织,一些代码不能公开的, 那就涉及到私有依赖管理了, 通常而言,直接使用go get 肯定会报错,去网上搜搜也不太全,设置完git url替换 之后,依然会报错。 本文主要是讲述,如何进行开发设置而不报错。

对于没有子目录的gitlab项目

如下面这种方式:

# 仓库地址
https://gitlab.com/group/project# gomodule 名称为
gitlab.com/group/project

可以使用如下命令进行设置, 设置完成之后,则可以通过 go get自动获取到依赖

# 设置GOPRIVATE环境变量
go env -w  GOPRIVATE=gitlab.com
go env -w  GOPRIVATE=gitlab.bitmartpro.com# 设置URL替换,把https转为ssh获取依赖
git config --global url."git@gitlab.com".insteadOf "https://gitlab.com"
git config --global url."git@gitlab.bitmartpro.com:".insteadOf "https://gitlab.bitmartpro.com/"# 如果遇到https报错,可以设置如下,如果本身就是正常的https就不用去管了
git config --global http.sslVerify false

按照如上方法设置一下,你就能轻松通过 go get来获取到私有的依赖,但这种方式有一个弊端,就是如果项目放在子目录下面,则依赖获取仍然会失败,下面就会讲一下两种在子目录存在的情况下,如何正常去获取私有依赖的方法。

对于子目录的gitlab项目

如下面这种方式

# 项目地址
https://gitlab.com/group/subgroup/project# go module 名称
gitlab.com/group/subgroup/project

即使我们设置了正常的ssh key,和git的url替换,仍然会得到报错

The project you were looking for could not be found or you don't have permissions to view it.

当我们用搜索引擎去搜去解决问题的时候,我们基本上搜到的结果都是让你去改 go module 的名称,如下

rm go.mod go.sum
go mod init gitlab.com/myuser/foogroup/barlib.git
go mod tidycd /go/src/another_project
go get gitlab.com/myuser/foogroup/barlib.git

它要求,必须要以 .git结尾,这样是一种比较简单的解决方案,但是正常的go module 命名一般是不带 .git 结尾的。 发生这种情况的原因是,它go get尝试发现给定路径上的模块以找到请求的 Go 模块存储库。只有找到存储库后,工具才会执行git clone或git checkout使用 SSH 密钥进行身份验证。问题归结为这样一个事实:如果没有 Gitlab 访问令牌,就无法列出/查看私有Gitlab 子组。 所以这个时候,我们就要用到下面这种方法。

  1. 在gitlab中创建token Gitlab->Preferences->Access Tokens
  2. 对于windows系统, 你可以先设置一个HOME的环境变量,指向你的用户目录,然后在用户目录下创建 _netrc文件; 对于Mac/Linux 则可以直接创建 ~/.netrc 文件
  3. 按照如下方式编辑 ~/.netrc 文件
machine gitlab.comlogin my_gitlab_usernamepassword my_gitlab_token
  • 上述machine是指你的gitlab仓库的地址
  • login 则为你的gitlab的用户名
  • password就是第一步创建的gitlab访问token

结合如上几种方式,你应该可以完整的解决掉你的go 获取私有依赖的问题。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/web/24165.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

C++ 依赖的C库查看和下载

依赖库查询:ldd 指令 # ldd libcyber.solinux-vdso.so.1 (0x0000ffff86b52000)libopt_proto.so > /home/caros/cyberrt/lib/libopt_proto.so (0x0000ffff84c4a000)libboost_filesystem.so.1.73.0 > /opt/orin/usr/local/lib/libboost_filesystem.so.1.73.0 (…

Java版工程项目管理平台:以源码驱动,引领工程企业数字化转型

在当今数字化时代,随着企业的扩张和业务的增长,传统的工程项目管理方法已显不足。为了提升管理效率、减轻工作负担、增强信息处理的快速性和精确度,工程企业亟需借助数字化技术进行转型升级。本文将向您展示一款基于Spring Cloud、Spring Boo…

SS2D反向传播问题记录【未解决】

使用SS2D写了一个简单的神经网络进行训练,但是训练报错: NotImplementedError: You must implement either the backward or vjp method for your custom autograd.Function to use it with backward mode AD. 环境: CUDA11.8 torch2.0.0 mam…

AI大模型日报#0607:10家国产大模型、GPT-4o挑战高考作文 | OpenAI公开破解GPT-4新方法

导读:AI大模型日报,爬虫LLM自动生成,一文览尽每日AI大模型要点资讯!目前采用“文心一言”(ERNIE 4.0)、“零一万物”(Yi-Large)生成了今日要点以及每条资讯的摘要。欢迎阅读&#xf…

TS 系列:使用元祖生成联合类型

需求:有这么个需求,我们有两个数组,一个记录扑克牌花色,一个记录扑克牌点数,需要有一个函数,传递两个值,根据传递的值生成扑克牌,需要我们定义参数的类型检查。 思路:肯…

2024速通python之python高阶技巧

文章目录 一、闭包1.什么是闭包2.优缺点3.nonlocal关键字 二、装饰器1.什么是装饰器2.举例3.传统方式4.装饰器方式5.语法糖写法 三、多线程1.线程参数2.多线程编程 四、网络编程1.Socket服务端编程2.Socket客户端编程 「章节总览」       【2024速通python之python基础…

超过20W个高质量组件的开源PCB库

项目介绍 Celestial Altium Library是由Altium行业专家Mark Harris创建的一个庞大的免费开源数据库库,专为Altium Designer而设计,库中包含超过20万个优质组件 . 特点 高质量数据:Celestial Altium Library注重数据的质量,用户可…

Day14:响应式网页

通过媒体查询、Bootstrap 框架完成腾讯全端网页响应式布局。 一、响应式布局方案 1、什么是响应式布局 它的主要特点是能够使网页根据不同的设备屏幕尺寸(如桌面电脑、平板电脑、手机等)和分辨率自动调整布局和显示效果,以提供最佳的用户体…

python的plt.axis()、plt.xlim() 和 plt.ylim()函数

坐标轴相关设置1、plt.axis():坐标轴设置 函数 plt.axis(*v, **kwargs) 主要用于设置坐标轴的属性,返回值为当前的坐标轴范围 [xmin, xmax, ymin, ymax],几种调用方式如下: 调用方式 说明 axis() 返回当前的坐标轴范围 [xmin, xmax, ymi…

pytorch构建模型训练数据集

pytorch构建模型训练数据集 pytorch构建模型训练数据集1.AlexNet:1.1.导入必要的库:1.2.数据预处理和增强:1.3.加载数据集:1.4.划分测试集和训练集:1.5.创建数据加载器:1.6.加载AlexNet模型:1.7.修改模型以…

qt qDebug兼容LOGE

目录 普通qDebug用法 qt qDebug兼容LOGE 模板参数2实现 qDebug 实现LOGE一样的用法,这样Android和qt同时支持LOGE打印日志 普通qDebug用法 #include <QApplication> #include <QDebug>int main(int argc, char *argv[]) {QApplication app(argc, argv);int ret…

帝国cms接入腾讯云人脸识别认证代码

利用帝国cms在做一些会员系统的时候&#xff0c;需要做人脸识别认证&#xff0c;之前接入了某api接口&#xff0c;发现身份证识别率真的低&#xff0c;还好充值的少&#xff0c;否则要出问题&#xff0c;后来发现会员注册率降低了不少&#xff0c;最终还是决定使用腾讯云的人脸…

三十五篇:数字化转型的引擎:赋能企业的ERP系统全景

数字化转型的引擎&#xff1a;赋能企业的ERP系统全景 1. 引言 在这个快速变化的数字时代&#xff0c;现代企业面临着前所未有的挑战和机遇。企业资源计划&#xff08;ERP&#xff09;系统&#xff0c;作为数字化转型的核心&#xff0c;扮演着至关重要的角色。它不仅是企业运营…

第二十六章HTML与CSS书写规范

1.HTML书写规范 1.文档类型声明及编码 统一为html5 声明类型。编码统一为utf-8。 2.页面tdk TDK是一个缩写&#xff0c;其中“T”表示为网页定义标题&#xff0c;“D”表示为网页定义描述 description&#xff0c;“K”表示为搜索引擎定义关键词keywords。 1、<title&g…

NFT Insider #133:苏富比将拍卖BAYC系列NFT,Taiko创世NFT系列已上线

引言&#xff1a;NFT Insider由NFT收藏组织WHALE Members &#xff08;https://twitter.com/WHALEMembers&#xff09;、BeepCrypto &#xff08;https://twitter.com/beep_crypto&#xff09;联合出品&#xff0c;浓缩每周NFT新闻&#xff0c;为大家带来关于NFT最全面、最新鲜…

立创·天空星开发板-GD32F407VE-EXTI

本文以 立创天空星开发板-GD32F407VET6-青春版 作为学习的板子&#xff0c;记录学习笔记。 立创天空星开发板-GD32F407VE-EXTI 中断硬件触发中断示例软件触发中断示例 中断 中断分为内部中断和外部中断 外部中断是由外部设备&#xff08;如按键、传感器、通信接口等&#xff09…

rollup.js(入门篇)

前沿 Rollup 是一个用于 JavaScript 的模块打包工具&#xff0c;它将小的代码片段编译成更大、更复杂的代码&#xff0c;例如库或应用程序。它使用 JavaScript 的 ES6 版本中包含的新标准化代码模块格式&#xff0c;而不是以前的 CommonJS 和 AMD 等特殊解决方案。ES 模块允许…

如何在Python中处理时间和日期

在Python中处理时间和日期&#xff0c;我们通常使用内置的datetime模块。这个模块提供了类来操作日期和时间&#xff0c;包括date、time、datetime、timedelta以及tzinfo。以下是datetime模块的一些基本用法&#xff1a; 1. 获取当前日期和时间 python复制代码 from datetime…

Linux编程for、while循环if判断以及case语句用法

简介 语法描述if条件语句if else条件判断语句if else-if else多条件判断语句for循环执行命令while循环执行命令until直到条件为真时停止循环case ... esac多选择语句break跳出循环continue跳出当前循环 1. for 循环 for语句&#xff0c;定量循环&#xff0c;可以遍历一个列表…

一文读懂AI时代GPU的内存新宠-HBM

一文读懂GPU最强辅助&#xff1a;HBM HBM&#xff0c;即高带宽内存&#xff0c;是一项领先的3D堆叠DRAM技术&#xff0c;专为高性能计算和图形处理单元&#xff08;GPU&#xff09;设计&#xff0c;满足其对内存带宽和容量的极致需求。该技术由AMD与海力士携手研发&#xff0c;…