通常公司都会有自己的Git仓库,可能涉及到利用go get进行项目依赖的问题。

我们以Gitlab作为私有仓库为例,仓库地址为:gitlab.com。

私有仓库鉴权设置

go get默认采用的https下载项目依赖,而私有仓库一般采用的ssh key的方式鉴权,所以直接使用go get会出现https鉴权失败的问题,解决办法有两种。

1. 将https替换为ssh

这种方式适合在自己的电脑上使用。

让git执行 git clone https://gitlab.com/xx.git时,自动替换为执行git clone git@gitlab.etsus.net:xx.git,需要执行如下命令:

git config --global url."git@gitlab.etsus.net:".insteadof "https://gitlab.etsus.net/"

2. 利用Gitlab 的 Access Token鉴权

在有些情况下,比如对于编译服务器,可能采用ssh key的方式权限太大,可以采用Access Token的方式来解决问题。

进入Gitlab—>Settings—>Access Tokens,然后创建一个personal access token,这里权限最好选择只读(read_repository)

然后让git在执行git clone https://gitlab.com/xx.git时,自动替换为执行git clone https://oauth2:${your_access_token}@gitlab.com/xx.git,需要执行如下命令:

git config --global url."https://oauth2:${your_access_token}@gitlab.com".insteadOf "https://gitlab.com"

将${your_access_token}替换为自己的 token

GOPROXY的导致的问题

在完成了上面的配置以后,还要看当前是否配置了GOPROXY,如果配置了GOPROXY,会导致私有库不可用。因为GOPROXY会导致go get所有的请求通过PROXY下载,最终导致鉴权失效。因此需要配置GOPRIVATE来指定私有库,配置到GOPRIVATE中的地址将不会转发到GOPROXY中了。

命令:

go env -w GOPRIVATE=gitlab.com

http导致的问题

需要运行在golang 1.14 版本及以上 go get默认采用的https,当我们的私有库是http的时候,需要利用GOINSECUREhttps转为http。命令如下:

go env -w GOINSECURE=gitlab.etsus.net

转自:oskip.com/post/private-repo-http-go-get/