从Bitbucket获取私有仓库的'Go Get'

43
所以基本上,我有一个Openshift项目,在Git推送时,使用'Go get'下载所有库并即时构建项目,因此我有一些代码不希望别人看到来自我的库中,并且为了正确编译代码,需要从github.com或另一个仓库中获取代码,因此我创建了一个私有的bitbucket.org仓库,现在,作为公共存储库,它可以正常工作,但是当我尝试从私有存储库中'Go Get'时,它会给出'Forbidden 403'错误。
如何避免这种情况发生? 感谢您阅读,祝您拥有愉快的一天!

你正在使用BitBucket的管道,对吧?我遇到了同样的问题。我添加了一个SSH密钥对,并将bitbucket.org添加为已知主机,但仍然收到403错误。我认为https://confluence.atlassian.com/x/DBuDMg中缺少一些内容,因为我们无法将PubKey添加到Bitbucket上的远程主机。 - Cedric
自从go@1.13版本以后,您需要遵循此解决方案 - Nazmi ZORLU
4个回答

82

go get 在内部使用 git。以下一行命令将使 git,并进而使 go get 通过 SSH 克隆您的软件包。

Github:

git config --global url."git@github.com:".insteadOf "https://github.com/"

BitBucket:

git config --global url."git@bitbucket.org:".insteadOf "https://bitbucket.org/"


9
即使已将 Bitbucket 添加到全局配置中,仍然无法访问且出现 403 错误,请问还可能有哪些原因,并如何解决? - user3226932
我能够使用SSH推送和拉取我的仓库,但不确定为什么go get没有看到这个配置更改,当我将此配置更改放入我的本地.git/config时,我也收到相同的错误消息。 - user3226932
顺便说一下,我正在构建我的Go应用程序的Docker镜像时执行go get操作,不确定这是否与此有关。 - user3226932
2
我遇到了与@user3226932相同的问题:即使添加了全局配置,仍然会收到403错误。通过执行git config --system命令解决了这个问题:git config --system url."git@github.com:".insteadOf "https://github.com/" - Subhash Chandran
4
执行以上命令后依然不起效,但错误提示提到它访问了api.bitbucket.org,因此我使用了以下命令: git config --global url."git@bitbucket.org:".insteadOf "https://api.bitbucket.org/" - kalsky
显示剩余2条评论

18
除了其他人提到的设置git config之外,我还需要设置GOPRIVATE
步骤1:git config --global url."git@bitbucket.<YOUR-COMPANY>".insteadOf "https://bitbucket.org/<YOUR-COMPANY>" 步骤2:export GOPRIVATE=bitbucket.org/<YOUR-COMPANY> 这里的GOPRIVATE是在此文档中记录的: https://golang.org/cmd/go/#hdr-Module_configuration_for_non_public_modules

1
对于托管在 GitHub 上的私有模块,根据建议设置 GOPRIVATE 是有效的,但与您的示例不同,我必须使用特定的身份验证 URL 修改 git 配置,例如:git config --global url."https://${GITHUB_USER}:${GITHUB_TOKEN}@github.com".insteadOf "https://github.com"。如果仓库是私有的,您如何进行身份验证? - n1nsa1d00
谢谢@MarcoDufal,问题已解决! - naoko

2

Ammar Bandukwala的回答是正确的,但如果你发现自己在一个关闭SSH出站端口(22)的防火墙后面,你可以使用HTTPS端口(443)上的SSH代替:

git config --global url."ssh://git@altssh.bitbucket.org:443/<account_name>".insteadOf "https://bitbucket.org/<account_name>"

来源:https://confluence.atlassian.com/bitbucket/troubleshoot-ssh-issues-271943403.html#TroubleshootSSHissues-Ifport22isblocked

如果您无法通过SSH连接到Bitbucket,请尝试以下解决方案:

  1. 确保您的计算机可以访问Bitbucket。
  2. 检查您的SSH密钥是否正确配置。如果需要,重新生成并添加您的密钥。
  3. 检查您的防火墙设置,确保端口22未被阻止。
  4. 尝试使用SSH连接时指定不同的端口。
  5. 检查您的代理设置,确保它们正确配置。

1

对于所有在尝试上述方法后(并得到404而不是403)来到这里的人,这是因为当您获取一个私有存储库时,BB已将响应代码从403更改为404。当通过SSH无法解析存储库时,Golang会回退到HTTP。这个问题已经在golang版本1.16+中得到了修复。


你的回答可以通过添加更多支持信息来改进。请编辑以添加进一步的细节,例如引用或文档,以便其他人可以确认你的答案是正确的。你可以在帮助中心找到有关如何编写良好答案的更多信息。 - Community

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接