登录
首页 >  Golang >  Go问答

如何在GitLab中加载子组中的模块?

来源:stackoverflow

时间:2024-02-28 12:36:24 112浏览 收藏

大家好,我们又见面了啊~本文《如何在GitLab中加载子组中的模块?》的内容中将会涉及到等等。如果你正在学习Golang相关知识,欢迎关注我,以后会给大家带来更多Golang相关文章,希望我们能一起进步!下面就开始本文的正式内容~

问题内容

我写了一个程序,想要封装一些逻辑。

所以我做了新模块并将其拉入我的 git 中。 git 的链接看起来像 gitlab.xxx.ru/group/subgroup/proj 但是当我尝试用 go get 获取它时,出现错误

fatal: «https://xxx.ru:@gitlab.xxx.ru/group/subgroup.git/» unreachable: url using bad/illegal format or missing url

go 尝试加载子组而不是项目。

我在 $gopath/src/ 中创建了文件夹 gitlab.xxx.ru/group/subgroup/ 并克隆我的项目。

现在它写道

could not import gitlab.xxx.ru/group/subgroup/proj (no required module provides package "gitlab.xxx.ru/group/subgroup/proj")

所以,如果我理解正确的话,在 golang 1.16 中我不能将我的项目放在正确的目录中,并且不能使用本地包。

如何修复从我的 gitlab 加载并使用 ssh 加载的问题?

谢谢。

我的项目中的 udp go.mod。

module gitlab.xxx.ru/group/subgroup/proj

go 1.16

require (
    golang.org/x/sys v0.0.0-20210608053332-aa57babbf139
    golang.org/x/text v0.3.6
)

正确答案


您可能会遇到 gitlab 的预期行为,这将阻止 go 在尝试计算项目依赖项时获取子组列表。由于go get请求未经身份验证,因此不在根组下的现有项目是不可见的,无法找到。

要克服这一限制(gitlab 尚未提供解决方案),您可以使用以下两种方法之一:

  • 将项目置于根目录而不是子组中(并不总是可行)
  • 在导入模块的项目中利用 .git 扩展以及替换指令(见下文)

如果 go 知道版本控制限定符 (.git),它就能够获取子组下的项目。为了表明这一点,请确保使用以下格式导入项目 gitlab.xxx.ru/group/subgroup/proj.git

虽然这本身有效,但它会迫使您在导入中包含所有这些 .git 。为了克服这个问题,您还需要在 go.mod 中使用 replace 指令,以便可以使用原始导入路径。

最后,导入模块的项目应该有一个 go.mod ,如下所示:

require(
 gitlab.xxx.ru/group/subgroup/proj v1.7.0
)

replace(
 gitlab.xxx.ru/group/subgroup/proj => gitlab.xxx.ru/group/subgroup/proj.git v1.7.0
)

好了,本文到此结束,带大家了解了《如何在GitLab中加载子组中的模块?》,希望本文对你有所帮助!关注golang学习网公众号,给大家分享更多Golang知识!

声明:本文转载于:stackoverflow 如有侵犯,请联系study_golang@163.com删除
相关阅读
更多>
最新阅读
更多>
课程推荐
更多>