go get 如何拉取私有仓库

go get 如何拉取私有仓库

地址:https://stackoverflow.com/questions/27500861/whats-the-proper-way-to-go-get-a-private-repository

标签:Go

译注:这个问题有不少有趣的回答,有些方案我还没有尝试,可以抽时间都研究下。

详情描述

我正在查找 go get 如何拉取私有仓库,在经过一番 google 之后,尝试了很多方法。

首次尝试:

$ go get -v gitlab.com/secmask/awserver-go
Fetching https://gitlab.com/secmask/awserver-go?go-get=1
https fetch failed.
Fetching http://gitlab.com/secmask/awserver-go?go-get=1
Parsing meta tags from http://gitlab.com/secmask/awserver-go?go-get=1 (status code 200)
import "gitlab.com/secmask/awserver-go": parse http://gitlab.com/secmask/awserver-go?go-get=1: no go-import meta tags
package gitlab.com/secmask/awserver-go: unrecognized import path "gitlab.com/secmask/awserver-go

输出显示,没有提供元标签内容,原因应该是我不知道该如何提供登录信息。

第二次尝试:

配置 git,查看 .gitconfig 中。

[url "ssh://git@gitlab.com/"]
    insteadOf = https://gitlab.com
$ go get -v gitlab.com/secmask/aswserver-go -> not work
$ go get -v gitlab.com/secmask/aswserver-go.git -> work but I got src/gitlab.com/secmask/awserer-go.git

这里的方案在加上 .git 后才有效。但是,拉取下的目录在项目名称后会加上 .git 的后缀名。虽说,可以通过重命名解决,但每次都这么做,显然太过繁琐。

有什么其他解决方案呢?

优秀回答

JulienD 的回答

你需要做个配置,例子是 github 的,但其他的同样使用。

$ git config --global url.git@github.com:.insteadOf https://github.com/
$ cat ~/.gitconfig
[[url "git@github.com:"]
    insteadOf = https://github.com/]
$ go get github.com/private/repo

fuz 的回答

最合适的方式,你可以手动拉取仓库并放到合适位置。下载完成,你就可以通过 go get -u 更新包,go install 安装。

假如,现在有一个包,名称如下:

github.com/secmask

它的路径应该位于:

$GOPATH/src/github.com/secmask/awserver-go`。

手工该如何操作呢?

$ cd $GOPATH/src/github.com/secmask
$ git clone git@github.com:secmask/awserver-go.git

译注:回答评论区域讨论了 go get 易用性的问题,手动固然能解决问题,但毕竟没 go get 方便。

Rodrigo Oliveira 的回答

在使用 gitlab 拉取私有仓库的私有仓库时,我也同样遇到了一些问题。于是,我花费了一些时间去寻找答案。

解决方案描述如下:

第一步,你需要获取到私有的 token,它位于:

https://gitlab.mycompany.com/profile/account

第二步,配置你的 git,加入你的私有 token:

$ git config --global http.extraheader "PRIVATE-TOKEN: YOUR_PRIVATE_TOKEN

第三步,将 ssh 转化 http 请求,如下:

$ git config --global url."git@gitlab.mycompany.com:".insteadOf "https://gitlab.mycompany.com/"
````

最后,使用你的 go get 吧!

$ go get gitlab.com/company/private_repo


[Miguel Mota 的回答](https://stackoverflow.com/a/51812212/11484375)

从 [这里](https://github.com/settings/tokens/new) 生成一个 github oauth token,并且将其作为一个环境变量 GITHUB_TOKEN。

bash $ export GITHUB_TOKEN=123


设置 git config,使用 basic auth。如下:

bash $ git config –global url.“https://$GITHUB_TOKEN:x-oauth-basic@github.com/“.insteadOf “https://github.com/" ```

现在,可以使用 go get 拉取私有仓库了。