【发布时间】:2021-08-21 20:03:32
【问题描述】:
背景
在我的公司,我们使用 Bit Bucket 来托管我们的 git 存储库。到服务器的所有流量都流经一个自定义的非标准端口。从我们的 repos 克隆看起来像 git clone ssh://git@stash.company.com:9999/repo/path/name.git。
问题
我想创建托管在此服务器上并由 go mod 管理的 Go 模块,但是,流量必须流经端口 9999 的事实使得这非常困难。这是因为go mod 在标准端口上运行,似乎没有提供为不同模块自定义端口的方法。
我的问题
是否可以使用go mod 管理托管在具有非标准端口的私有 git 服务器上的 Go 模块?
尝试的解决方案
供应
这似乎是最接近提供解决方案的方式。首先我 go mod vendor 想要使用这些 Go 模块的 Go 应用程序,然后我 git submodule vendor/ 目录中的 Go 模块。在需要更新或添加模块的情况下,这可以完美运行。 go mod tidy 将一直无法下载或更新其他 Go 模块,因为它无法访问自定义 Go 模块的“git URL”。即使设置了-e 标志。
编辑.gitconfig
编辑.gitconfig 以将不带端口的 URL 替换为带端口的 URL 是一种可行的解决方案,但这是一个非常肮脏的 hack。首先,必须对任何新模块以及每个单独的开发人员进行这些编辑。其次,这可能会在处理这些存储库时阻止其他 git 进程。
【问题讨论】:
-
如golang.org/cmd/go/#hdr-Remote_import_paths中所述设置返回适当元标记的Web服务器
-
如果您希望这些被广泛使用,您必须设置一个服务器来处理规范导入路径。否则,请配置您的本地 VCS 以处理不同的位置。
-
上面的链接应该涵盖您需要的所有信息。前段时间我还专门询问了a similar question v1 以上的导入路径,其中也包含有用的上下文
-
(是预模块,但未接受的 .gitconfig 解决方案应该适合您!)
标签: go go-modules vendoring