如何使用 go get 命令从公司的 gitlab 仓库下载私有项目

How to use the go get command to download private projects from the company's gitlab repository

提问人:moluzhui 提问时间:11/17/2023 最后编辑:moluzhui 更新时间:11/17/2023 访问量:90

问:

我有一个项目需要依赖内部 gitlab 私有库。

我通过以下命令配置了它,但发生了 URL 404 错误。示例如下

$ go env -w GOPRIVATE=a.b.com
$ go env -w GOINSECURE=a.b.com
$ go get -v -x a.b.com/testgroup/compkg
# get https://a.b.com/?go-get=1
# get https://a.b.com/testgroup/testpkg?go-get=1
# get https://a.b.com/testgroup?go-get=1
# get https://a.b.com/testgroup?go-get=1: 404 Not Found (0.044s)
# get https://a.b.com/?go-get=1: 403 Forbidden (0.044s)
# get https://a.b.com/testgroup/testpkg?go-get=1: 404 Not Found (0.044s)
# get https://a.b.com/testgroup/testpkg?go-get=1
# get https://a.b.com/testgroup?go-get=1
# get https://a.b.com/?go-get=1
# get https://a.b.com/testgroup/testpkg?go-get=1: 404 Not Found (0.001s)
# get https://a.b.com/testgroup?go-get=1: 404 Not Found (0.001s)
# get https://a.b.com/?go-get=1: 403 Forbidden (0.002s)
go get: unrecognized import path "a.b.com/testgroup/testpkg": reading https://a.b.com/testgroup/testpkg?go-get=1: 404 Not Found

然后我试着切换到ssh来拉,例子如下

$ git config --global url."[email protected]:testgroup/compkg.git".insteadOf "https://a.b.com/testgroup/compkg"
$ go get -v -x a.b.com/testgroup/compkg
# get https://a.b.com/?go-get=1
# get https://a.b.com/testgroup/testpkg?go-get=1
# get https://a.b.com/testgroup?go-get=1
# get https://a.b.com/testgroup?go-get=1: 404 Not Found (0.044s)
# get https://a.b.com/?go-get=1: 403 Forbidden (0.044s)
# get https://a.b.com/testgroup/testpkg?go-get=1: 404 Not Found (0.044s)
# get https://a.b.com/testgroup/testpkg?go-get=1
# get https://a.b.com/testgroup?go-get=1
# get https://a.b.com/?go-get=1
# get https://a.b.com/testgroup/testpkg?go-get=1: 404 Not Found (0.001s)
# get https://a.b.com/testgroup?go-get=1: 404 Not Found (0.001s)
# get https://a.b.com/?go-get=1: 403 Forbidden (0.002s)
go get: unrecognized import path "a.b.com/testgroup/testpkg": reading https://a.b.com/testgroup/testpkg?go-get=1: 404 Not Found

两次尝试都出现相同的错误。go get: unrecognize import path “a.b.com/testgroup/compkg”: reading https://a.b.com/testgroup/compkg?go-get=1: 404 未找到

我使用以下 curl 命令返回以下错误:

$ curl --insecure https://a.b.com/testgroup/compkg?go-get=1
<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 2.0//EN">
<html>
<head><title>404 Not Found</title></head>
<body bgcolor="white">
<h1>404 Not Found</h1>
<p>The requested URL was not found on this server.<hr/>Powered by Tengine</body>
</html

有没有其他方法可以尝试,或者是我的试错?期待您的回复。

PS:a.b.com/test/compkg 没有任何 git 标签,并且是 groupname 不是 gitlab 的用户名。testgroup

  • gitlab 版本:Gitlab 社区版 13.6.7
  • Go 版本:Go v1.16
  • 我可以通过输入用户名和密码进行投影git pull
git gitlab go-get

评论

2赞 Volker 11/17/2023
首先:更新 Go。你的已经过时了。再试一次。而且:您的 Gitlab 也有 3 年的历史了。基本上一切看起来都很合理,应该可以工作(除非在您的 Gitlab 设置中打开)
0赞 erik258 11/17/2023
“404 Not Found”几乎可以肯定地表示你未获得授权(以避免未经身份验证的各方进行回购枚举)。“两次尝试都犯了同样的错误......“ 您使用 SSH 的配置不起作用;它仍然使用 HTTPS。为此使用 ssh; 不支持提供用户名/密码。将密钥添加到 ssh 代理,将其放在默认位置,或以其他方式为 a.b.com 配置 ssh。如果在没有用户/密码提示的情况下工作,也应该reading https://go getgit pullgo get
0赞 moluzhui 11/18/2023
@erik258我为 gitlab 设置了 ssh-keys 并在没有密码的情况下工作,但仍然有相同的错误。我添加了一些参数来显示 go get 时的详细信息。我在原文中添加了它们。你能看看你是否能找到问题吗?git pullgo get
0赞 erik258 11/18/2023
哦 - 你这样做了吗?stackoverflow.com/questions/58305567/......
0赞 moluzhui 11/18/2023
@erik258是的,我设置了 GOPRIVATE 和 url insteadOf,但错误仍然与问题中的完全相同

答: 暂无答案