首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >多路径Go模块

多路径Go模块
EN

Stack Overflow用户
提问于 2022-12-02 00:11:00
回答 1查看 40关注 0票数 1

我有一个go模块,它被镜像到几个位置。一个在gitlab,另一个在bitbucket。当试图将其建立在新的gitlab位置上时,我得到:

go: gitlab.com/company/core@v1.0.21:解析go.mod:模块声明其路径为: bitbucket.org/company/core,但必须为: gitlab.com/company/core

我知道为什么会发生这种情况,但我如何将我的go.mod定义为要么或者是?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-12-02 00:44:28

简短的回答:,你不能。

但一切都不会失去..。

如果在模块路径引用的位置和出于某种原因喜欢从其中下载的其他位置都有代码,则可以配置git alias将引用从指定的模块路径重定向到所需的下载源:

代码语言:javascript
复制
git config --global --add url."https://<download path>".insteadOf "https://<module path>"

别名不一定是完全替换的。您可以使用别名替换任何模块路径上的前缀。因此,如果您已经在服务器Y上(在模块路径中)识别了许多托管在服务器X上的模块,则只需将服务器主机前缀和路径化名就可以覆盖所有这些模块(只要回购名称相同)。

例如,我们使用它为驻留在on服务器git repos中的模块创建“友好”模块路径,例如:

代码语言:javascript
复制
git config --global --add url."https://tfs.myorg.com/myorgcollection/_git".insteadOf "https://tfs.myorg.com"

然后,我们的模块就能够将自己标识为tfs.myorg.com/somemodule.git,但是当go get试图获取这个git时,它将在https://tfs.myorg.com/myorgcollection/_git/somemodule.git查找它。

( .git后缀是必要的Azure DevOps特性)

老实说,我还没有在完全不同的服务器上尝试过这种方法,只是为了“重写”同一台服务器上的路径,但原则上它应该能工作。所以在你的情况下:

代码语言:javascript
复制
git config --global --add url."https://gitlab.com/company/".insteadOf "https://bitbucket.org/company/"

因为这在git级别起作用,所以就go而言,它仍然是从bitbucket.org那里得到的,尽管git将被隐藏到gitlab.com中。

例如,当您go get时,您需要引用声明的模块路径:

代码语言:javascript
复制
go get bitbucket.org/company/core

唯一的缺点是,您需要在任何/所有工作站(和构建机器)上配置别名,这些工作站需要从模块路径中声明的位置以外的任何位置进行go get

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/74649513

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档