为了账号安全,请及时绑定邮箱和手机立即绑定

为什么去模块ssh自定义私有存储库(非github)配置仍然请求https获取?

为什么去模块ssh自定义私有存储库(非github)配置仍然请求https获取?

Go
慕森卡 2022-08-01 18:42:34
我正在使用Go模块。为了使用模块版本,我不能使用本地模块。例如:replace locakpkg => ../localpkg v0.1.0上述操作将失败,因为到目前为止,替换本地路径无法有版本(转到 1.15)。因此,为了使模块版本正常工作,我决定使用私有ssh存储库。我确实搜索了如何使私有ssh存储库工作两天。通过关注许多在线文章,我做到了git config --global url.user@private.com:.insteadOf https://private.com/go env -w GOPRIVATE=private.com我发现go get总是会做https fetch来检查ssl凭证。所以我也正确地配置了一个https服务器。但最终,我仍然收到一条错误消息:unrecognized import path "private.com/foo": reading https://private.com/foo?go-get=1: 404 Not Found我确实谷歌了这个错误,并发现了这个规范 https://golang.org/ref/mod#vcs-find 它说我必须让服务器回复https获取请求。<meta name="go-import" content="root-path vcs repo-url">如果有一种方法可以在本地模块包中使用git标签版本控制,我可以在go.mod中使用本地替换,而不是配置私有ssh存储库。如果以上几点无法实现,那么在配置私有 ssh 存储库时如何避免 https 获取?我认为ssh repo与https协议无关。
查看完整描述

1 回答

?
蝴蝶刀刀

TA贡献1801条经验 获得超8个赞

(我在 Linux 上使用 go 1.15。发布此答案时的最新稳定版本)

我解决了这个问题并在这里发帖,希望有一天这会帮助其他人。我在网上搜索没有找到任何正确的答案。

简而言之,答案是在所有地方都使用后缀。不带后缀,将使用代替 (git)。.git.gitgo mod tidygo gethttpsssh

在客户端:

该文件(在 linux 上)如果您在服务器上使用 path:~/.gitconfig/repopath/foo.git

[url "ssh://user@private.com"]
    insteadOf = https://private.com

该文件(在 linux 上)如果您在服务器上使用 path:~/.gitconfig~/repopath/foo.git

[url "user@private.com:"]
    insteadOf = https://private.com/

执行以下命令以在 Linux 上进行更新:~/.config/go/env

go env -w GOPRIVATE=private.com

在 中,它应该使用go.mod

require private.com/repopath/foo.git v0.1.0

在 中,它应该是file.go

import private.com/repopath/foo.git

在 SSH 服务器上

在私有服务器上应该有:foo.git/go.mod

module private.com/repopath/foo.git

并确保服务器上的 git 存储库具有 标记版本 。不要忘记在客户端使用将标签版本更新到服务器。没有 ,则不会推送标记版本。v0.1.0git push --tags--tags

在添加后缀到所有必需的位置后,将不再发送https请求。.gitgo mod tidygo get


查看完整回答
反对 回复 2022-08-01
  • 1 回答
  • 0 关注
  • 167 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号