我写了一个程序,想封装一些逻辑。
所以我创建了新模块并将其拉入我的 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
扩展和 replace 指令(见下文)
如果知道版本控制限定符 (.git),Go 能够获取子组下的项目。为了表明这一点,请确保使用以下格式导入项目 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
)
关于go - 如何从 gitlab 子组加载模块?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/67924850/