实际问题
由于公司团队使用gitea搭建了git私有仓库,在开发Go程序的时候会有一些公共代码,比如插件和主程序之间要共享接口和数据结构,所以就需要在gitea私有仓库中创建依赖仓库,然后其他仓库引用这个私有仓库作为依赖。
解决方案
由于公司是使用的ip地址访问的gitea仓库,为了和go的其他依赖项一样使用域名作为路径的开始,所以先定一个gitea.com域名,然后在~/.gitconfig文件中增加如下配置信息:
[url "http://<gitea服务的ip地址>:<gitea服务开放的端口>/"]
insteadOf = https://gitea.com/
注意上面替换配置中是将https
协议替换为http
协议了,这点很重要,因为内部gitea私有仓库是走的http
协议访问的。
假设,我们的gitea服务所在ip地址为192.168.0.23
,端口为3333,那么上面的配置就可以具体化为如下所示:
[url "http://192.168.0.23:3333"]
insteadOf = https://gitea.com/
其实可以在gitea仓库的下载地址看到ip地址和端口的,如下图所示:
以上面的工程zzg/DriverCommonInterface
为例子,在工程中的go.mod文件中要将包的路径申明为如下所示:
module gitea.com/zzg/DriverCommonInterface.git
go 1.22.2
然后使用这个依赖的工程(假设工程为A)中使用go get
命令拉取依赖:
go get gitea.com/zzg/DriverCommonInterface.git
然后在工程A的go.mod文件中出现的依赖就是如下所示:
require gitea.com/zzg/DriverCommonInterface.git v1.0.1
其中v1.0.1
是为依赖工程zzg/DriverCommonInterface
创建的tag,也就是版本号。
知其然知其所以然
go get 原理
go get 可以下载git、svn等管理的源代码仓库
没有找到详细的调用git命令的代码,但是在go get
命令的注释中说明了会调用版本控制命令,比如git。
所以在git的配置文件(~/.gitconfig
)中配置了替换规则才会生效。
模块名称
因为模块名称必须和下载路径(gitea.com/zzg/DriverCommonInterface.git)保持一致,所以在DriverCommonInterface工程的go.mod文件中定义的模块名称为gitea.com/zzg/DriverCommonInterface.git
,即go.mod内容为如下所示:
module gitea.com/zzg/DriverCommonInterface.git
go 1.22.2
参考资料
一篇文章彻底弄懂Golang私有仓库配置问题
Golang私有仓库配置问题](https://blog.csdn.net/pillar04/article/details/131206819)