通常公司都会有自己的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
的时候,需要利用GOINSECURE
将https
转为http。命令如下:
go env -w GOINSECURE=gitlab.etsus.net
转自:oskip.com/post/private-repo-http-go-get/