【发布时间】:2021-01-18 20:10:00
【问题描述】:
有一个私有的git站点,地址为gitlab.myownsite.com,文件夹结构为:
/common
|___ /libs
|___ /lib_a
|__ lib_a.mod
/somethingelse
请注意,这不是单个项目的文件夹结构,它是gitlab.myownsite.com 的结构,其中包含许多repo。比如我用Go写了一个库lib_a,然后在路径gitlab.myownsite.com/common/libs/lib_a创建了一个repo,它的模块名是:
module gitlab.myownsite.com/common/libs/lib_a
但是,这个命名违反了github.com/username/reponame的命名规则,导致另一个项目使用了我的lib_a by:
import "gitlab.myownsite.com/common/libs/lib_a"
错误解析导入gitlab.myownsite.com/common/libs.git的子包lib_a,common被识别为username,libs为reponame,lib_a为包名。 go mod 报错:
repository 'https://gitlab.myownsite.com/common/libs.git/' not found
我无法更改这个私有gitlab站点的文件夹结构,如何解决这个问题?
我的 go 模块 env 有:GOPRIVATE=gitlab.myownsite.com
【问题讨论】:
-
你有多个模块吗?
go.mod文件在哪里? -
这个 gitlab 很多人共享。 lib_x 是独立项目,但是它们有相同的父文件夹
-
lib_a.mod和lib_b.mod是什么?它们与你的 Go 代码有什么关系?你的意思是把go.mod文件放在这些位置,还是别的什么? -
我不确定您的评论是否旨在解决@icza 的问题,但事实并非如此。你有多个模块吗?
go.mod文件在哪里? -
确保您的 gitlab 提供必要且相关的导入元标头。阅读golang.org/cmd/go/#hdr-Remote_import_paths。请注意,您认为存在某种“github.com/username/reponame 的命名规则”的假设是完全错误的。哪有这回事。 go 工具知道一些代码托管站点,所有其他站点(尤其是您的 Gitlab 实例)必须提供
<meta name="go-import" content="example.org git https://code.org/r/p/exproj">响应。无需更改任何文件夹布局。
标签: go go-modules