在 Go 语言中引用私有 Git 仓库
该文章根据 CC-BY-4.0 协议发表,转载请遵循该协议。
本文地址:https://fenying.net/post/2025/02/08/using-private-git-repository-in-golang/
简单记录下 Go 语音里如何从私有 Git 仓库安装、引用代码。
当使用 go get
命令获取一个私有(非公开访问)的 Git 仓库时,身份验证问题或者网络限制问题会导致 go
命令无法获取到代码。
要解决这个问题,其实就是解决两个问题:
- 令 go 工具链认识到指定域是私有域,不要通过其公网代理去访问(go 工具链默认会通过公共代理
sum.golang.org
去检查指定的仓库是否可用) - 令 go 工具链获得私有仓库的访问权限,不论是通过 HTTPS 协议还是通过 SSH 协议。
1. 令 go 工具链认识到指定域是私有域
通过设置 GOPRIVATE
变量,将私有 Git 仓库服务器的主机名告诉 go 命令
1export GOPRIVATE=git.domain1.com,git.domain2.com
建议添加到
~/.bash_profile
里。
配置完成后,go 命令在尝试获取来自这些域的代码时,会直接访问,而不会通过代理。
2. 给予 go 工具链访问私有仓库的权限
由于 Go 本身是通过 git
命令获取代码的,所以只要保证 git
命令可以访问私有仓库,go
命令也就可以了。
比如执行 go get your-domain.com/username/repo-name
命令时,go
命令会通过以下命令去获取代码:
1git clone https://your-domain.com/username/repo-name.git
那么假如其实可以通过配置 git 命令,令其改成通过 ssh 协议访问即可:
1YOUR_DOMAIN=your-domain.com
2
3git config \
4 --global url."git@$YOUR_DOMAIN:".insteadOf "https://$YOUR_DOMAIN/"
以上命令强制 git
命令将 https://$YOUR_DOMAIN/
替换为 git@$YOUR_DOMAIN:
比如将 https://your-domain.com/username/repo-name.git
替换为 [email protected]:username/repo-name.git
又或者你想使用 HTTPS 协议,但是也需要身份验证,那么可以采用相似的方法,把身份验证信息添加到 URL 中:
1YOUR_DOMAIN=your-domain.com
2YOUR_USERNAME=your-username
3YOUR_PASSWORD=your-password # 也可能是 API Token
4
5git config \
6 --global url."https://$YOUR_USERNAME:$YOUR_PASSWORD@$YOUR_DOMAIN/".insteadOf "https://$YOUR_DOMAIN/"
OVER.
comments powered by Disqus