猿问

如何解决 Go 模块将其路径声明为“x”但在 2 个版本之间被要求为“y”

我最近不得不将私有存储库从 SaaS Gitlab 迁移到本地版本。我做的一切都很顺利:

  1. 将repo 中的旧 go 模块路径从更新aold.com/workspace/anew.com/workspace/a

  2. v1.2.3-new为最新的提交添加一个新标签

  3. 更新 repob以引用v1.2.3-new来自的最新标签new.com/workspace/a

  4. go mod tidy在 repo 中运行b并验证它是否有效

现在我需要引用new.com/workspace/a(originally old.com/workspace/a) 的旧版本标签。所以在 repo 中a,我检查了旧标签,将模块路径固定为new.com/workspace/afromold.com/workspace/a并将其标记为v1.1.1-new.

在 repob然后我引用new.com/workspace/av1.1.1-new. 但是,这会导致:

go: new.com/workspace/a@v1.1.1-new: parsing go.mod:
    module declares its path as: old.com/workspace/b
            but was required as: new.com/workspace/b

如果我检查v1.1.1-newrepo 中的标签a,模块路径在文件中设置正确go.mod

module new.com/workspace/a

我不清楚为什么它与v1.2.3-new最新提交的标签一起工作,但当我引用较旧的提交时却失败了。


慕侠2389804
浏览 100回答 1
1回答

心有法竹

所以我不能说我完全理解为什么这样做有效,但这里是使它起作用的步骤(包括没有起作用的步骤)。我诉诸于清除缓存go clean -modcache测试了以下但它仍然失败。go get new.com/workspace/a@v1.1.1-new根据我在原始问题中的评论,这通过提交v1.1.1-new哈希起作用所以我再次求助于它。go get  new.com/workspace/a@27ca81f7现在它选择了那个提交的版本并且成功了。尽管在命令中使用了提交散列,但该 go.mod文件也已使用标签/版本正确更新go get。new.com/workspace/a v1.1.1-new
随时随地看视频慕课网APP

相关分类

Go
我要回答