Go导入私有仓库

使用go.mod依赖第三方库时,有以下要求:

  1. 代码仓库托管于VCS(版本控制系统);
  2. 代码仓库是公开的;
  3. 仓库地址使用域名访问;
  4. 仓库域名支持HTTPS访问。

对于自己或者公司内部搭建的私有git,这些条件是比较难同时满足的,本文我们就来看看这些条件不满足时,该怎么办?

这个问题其实分两种情况来看,如果你自己的仓库是一个“正规”的仓库,使用域名访问,不带端口,通过HTTPS访问,唯一的区别是你的仓库是私有的。这种情况下,只需要设置一下 GOPRIVATE 环境变量就可以了,值是你的仓库域名,可以带路径。托管于GitHub上的私有仓库也可以依此设置。比如你的仓库域名是 myrepo.com ,按如下设置环境变量即可:

GOPRIVATE=myrepo.com

如果你只有某个组下的仓库是私有的,可以通过路径指定,多个域名通过逗号分隔。

GOPRIVATE=myrepo.com/mygroup,myrepo.com/yourgroup

接下来就是比较复杂的情况,比如仓库是非标的,通过IP地址访问,或者需要带端口访问,还有只能通过HTTP访问等。这种情况下我们就需要对git下手了,因为 go get 最后还是会用到git来下载包。

第一步我们需要用一个标准仓库域名来充当门面,配置命令如下:

git config --global url."http://myrepo.com:8080/".insteadof "https://gitea.com/"

上面的命令会修改 C:\Users\kaka\.gitconfig 文件,给你加上下面的配置:

[url "http://myrepo.com:8080/"]insteadof = https://gitea.com/

当然,你也可以手动修改这个文件,加上上面的配置,再者可以在执行配置命令前后对比下这个文件的变化。这样,当我们访问gitea.com的时候,实际上会访问到myrepo.com:8080,而且从协议从HTTPS换到了HTTP。经过上面的偷梁换柱,我们已经做到了瞒天过海。

需要注意的是, insteadof 后面的域名要是一个“正规”的版本控制仓库。因为go在下载代码之前首先会通过 https://gitea.com/repo/test?go-get=1 获取信息,注意最后的 ?go-get=1 ,正常情况下它的响应如下:

<!doctype html>
<html><head><meta name="go-import" content="gitea.com/repo/test git https://gitea.com/repo/test.git"><meta name="go-source"content="gitea.com/repo/test _ https://gitea.com/repo/test/src/branch/main{/dir} https://gitea.com/repo/test/src/branch/main{/dir}/{file}#L{line}">
</head><body>go get gitea.com/repo/test
</body></html>

看到body中的内容了吗,这就是真正的代码获取地址。

如果仓库是私有的,那么我们还是需要配置 GOPRIVATE 环境变量。只不过这次我们要配置的域名是 insteadof 后面的域名,在我们的例子中应该配置 GOPRIVATE=gitea.com

第三步我们需要去修改 go.mod 文件,将包名中的域名换成 insteadof 后面的域名,此例中是 gitea.com

最后一步,在你的仓库中发布一个release,这样就可以在其他go项目中正常引入自己那非标仓库里的包了。

最后的最后,如果你使用的是GoLand或者IDEA,这类IDE好像有自己的环境变量机制,直接修改系统环境变量有时候不会生效,你需要在IDE里面设置或者在它的命令行通过 go env -w GOPRIVATE=gitea.com 这样的方式来设置。

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

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

相关文章

K8S node节点配置

1.开始操作之前要先关闭防火墙&#xff0c;SELinux&#xff0c;swap分区 关闭防火墙 sudo systemctl stop firewalld关闭SELinux sudo setenforce 0 # 临时关闭 sudo sed -i s/^SELINUXenforcing$/SELINUXper…

常用脚本01 - 生成证书

1 生成证书 第一步、准备脚本文件 [rootharbor-01 ssl]# vim gencert.sh #!/usr/bin/env bash set -eDOMAIN"$1" IP"$2" WORK_DIR"$(mktemp -d)"if [ -z "$DOMAIN" ]; thenecho "Domain name needed."exit 1 fiecho "…

UML2.0在系统设计中的实际使用情况

目前我在系统分析设计过程中主要使用UML2.0来表达&#xff0c;使用StarUML软件做实际设计&#xff0c;操作起来基本很顺手&#xff0c;下面整理一下自己的使用情况。 1. UML2.0之十三张图 UML2.0一共13张图&#xff0c;可以分为两大类&#xff1a;结构图-静态图&#xff0c;行…

Centos7.9 OpenSSH 安全漏洞(CVE-2023-38408)

因为CVE-2023-38408&#xff0c;需要升级升级OpenSSH版本&#xff1a; yum groupinstall -y "Development Tools" yum install -y zlib-devel openssl-devel wgetcp /etc/ssh/sshd_config /etc/ssh/sshd_config.bak chmod 600 /etc/ssh/ssh_host_rsa_key chmod 600…

Vitalik Buterin香港主旨演讲:协议过去10年迅速发展,但存在效率、安全两大问题

2024 香港 Web3 嘉年华期间&#xff0c;以太坊联合创始人 Vitalik Buterin 在由DRK Lab主办的“Web3 学者峰会 2024”上发表主旨演讲《Reaching the Limits of Protocol Design》。 他介绍到&#xff0c;2010年代&#xff0c;基于基本密码学的协议是哈希、签名。随后&#xff…

【vscode】快捷键及配置

不显示横向滑轨&#xff08;一行太长直接在编辑界面换行显示&#xff0c;实际在代码文件上没有实际换行&#xff09; ALT z

Android音视频开发-AudioRecord

Android音视频开发-AudioRecord 本篇文章主要讲下AudioRecord. 1: 简介 AudioRecord是Android平台上的一个类&#xff0c;用于实时录制音频数据。它提供了一种方便的方式来捕获和处理音频流。 以下是关于AudioRecord的一些介绍&#xff1a; 音频源&#xff1a;Record可以从…

Linux虚拟内存简介

Linux&#xff0c;像多数现代内核一样&#xff0c;采用了虚拟内存管理技术。该技术利用了大多数程序的一个典型特征&#xff0c;即访问局部性&#xff08;locality of reference&#xff09;&#xff0c;以求高效使用CPU和RAM&#xff08;物理内存&#xff09;资源。大多数程序…

网络安全---非对称数据加密签名验证

一、课题描述 三位同学一组完成数据的非对称加密和数字签名验证传输。 三位同学分别扮演图中 Alice、Bob 和 CA 三个角色&#xff0c;Bob 和 Alice 从 CA 中获得数字证书、Bob 向 Alice 发送秘密发送一段加密并签名后的信息&#xff0c;Alice 获取 Bob 发送的加密信息&#x…

网络安全---Packet Tracer - 配置扩展 ACL

一、实验目的 在Windows环境下利用Cisco Packet Tracer进行 配置防火墙操作。 二、实验环境 1.Windows10、Cisco Packet Tracer 8.2 2.相关的环境设置 在最初的时候&#xff0c;我们已经得到了搭建好的拓扑模型&#xff0c;利用已经搭建好的拓扑模型&#xff0c;进行后续的…

[蓝桥杯 2019 国 B] 解谜游戏

[蓝桥杯 2019 国 B] 解谜游戏 题目背景 题目描述 小明正在玩一款解谜游戏。谜题由 24 24 24 根塑料棒组成&#xff0c;其中黄色塑料棒 4 4 4 根&#xff0c;红色 8 8 8 根&#xff0c;绿色 12 12 12 根 (后面用 Y 表示黄色、R 表示红色、G 表示绿色)。初始时这些塑料棒排…

华科大发布多模态大模型Monkey:低成本扩大输入分辨率,部分性能超越GPT-4V

前言 近年来&#xff0c;基于Transformer架构的多模态大语言模型(MLLM)在视觉理解和多模态推理任务中展现了出色的潜力。但这些模型通常需要大量的训练资源&#xff0c;限制了它们在更广泛研究和应用领域的普及。一种直接的解决方案是使用更小规模的预训练视觉和语言模型&…

Harmony鸿蒙南向驱动开发-MIPI CSI

CSI&#xff08;Camera Serial Interface&#xff09;是由MIPI联盟下Camera工作组指定的接口标准。CSI-2是MIPI CSI第二版&#xff0c;主要由应用层、协议层、物理层组成&#xff0c;最大支持4通道数据传输、单线传输速度高达1Gb/s。 物理层支持HS&#xff08;High Speed&…

【御控物联】 2、物联网构成

文章目录 一、前言二、物联网的架构三、物联网的参与角色四、物联网的软硬件五、技术资料 一、前言 物联网的定义&#xff0c;前一章节我们已经做了大体介绍。本章我们说一下物联网的构成&#xff0c;物联网的构成相对来说比较难以总结&#xff0c;主要是因其应用场景特别的多…

UVA12538 Version Controlled IDE 题解 crope

Version Controlled IDE 传送门 题面翻译 维护一种数据结构&#xff0c;资磁三种操作。 1.在p位置插入一个字符串s 2.从p位置开始删除长度为c的字符串 3.输出第v个历史版本中从p位置开始的长度为c的字符串 1 ≤ n ≤ 50000 1 \leq n \leq 50000 1≤n≤50000&#xff0c;所…

【案例分享】如何通过甘特图管理项目进度?

我将通过一个实际案例来具体说明我是如何通过甘特图来管理项目进度的。 案例背景&#xff1a; 我负责过一个软件开发项目&#xff1a;一款在线学习APP。项目团队包括项目经理、开发人员、测试人员、UI设计师等多个角色&#xff0c;预计项目周期为6个月。 案例实施过程&…

使用阿里云试用Elasticsearch学习:4. 聚合——1

在这之前&#xff0c;本书致力于搜索。 通过搜索&#xff0c;如果我们有一个查询并且希望找到匹配这个查询的文档集&#xff0c;就好比在大海捞针。 通过聚合&#xff0c;我们会得到一个数据的概览。我们需要的是分析和总结全套的数据而不是寻找单个文档&#xff1a; 在大海里…

vue快速入门(十二)v-key索引标志

注释很详细&#xff0c;直接上代码 上一篇 新增内容 v-key的使用场景数组筛选器的使用 源码 <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, i…

【Redis】持久化

文章目录 一、RDB1.1、RDB的自动备份与手动备份1.1.1、自动备份1.1.2、手动备份 1.2、RDB优点1.3、RDB缺点1.4、RDB快照1.5、RDB优化配置项 二、AOF2.1、AOF工作流程2.2、AOF写回策略2.3、MP-AOF实现2.4、AOF优缺点2.5、AOF重写机制 三、RDBAOF混合持久化3.1、数据恢复顺序和加…

【JavaSE】接口 详解(下)

前言 欢迎关注个人主页&#xff1a;逸狼 创造不易&#xff0c;可以点点赞吗~ 如有错误&#xff0c;欢迎指出~ 目录 前言 接口实例运用 代码举例理解 比较对象的年龄 比较对象的姓名 利用冒泡排序实现Array.sort 年龄比较器 姓名比较器 比较示例测试 clone接口 浅拷贝和深拷贝 浅…