为了账号安全,请及时绑定邮箱和手机立即绑定

去 mod replace 和 github forks of /vN repositories

去 mod replace 和 github forks of /vN repositories

Go
扬帆大鱼 2022-08-30 14:45:23
我刚刚向 http://periph.io/x/devices/v3 发送了一个拉取请求;它已经被合并了,但是关于该过程的某些内容并不理想:首先,我克隆了存储库(它实际上是 http://github.com/periph/devices;模块是命名的),所以我的分叉自动称为 http://github.com/lutzky/devices。我想测试一段单独的代码,我正在使用修改后的库,称之为;将此添加到作品中:periph.io/x/devices/v3testclienttestclient/go.modreplace periph.io/x/devices/v3 v3.6.9 => ../devices但是,这也应该有效(如果拉取请求需要更长的时间才能被接受,这将很有用),并且不会:replace periph.io/x/devices/v3 v3.6.9 => github.com/lutzky/devices main这给出了这个错误:testclient/go.mod:15: replace github.com/lutzky/devices:  version "v0.0.0-20210508194004-cae0146d8900" invalid:  go.mod has post-v0 module path "periph.io/x/devices/v3" at revision cae0146d8900凭直觉,我想我会创建一个标签,然后把它推到我的叉子上,然后把命令指向那个。这也行不通:v3.6.9-newfeaturereplacetestclient/go.mod:15: replace github.com/lutzky/devices:version "v3.6.9-newfeature" invalid:module contains a go.mod file, so major version must be compatible: should be v0 or v1, not v3所以我不能使用v0标签,因为说它是,但我不能使用v3标签,因为URL没有。我不认为我应该在我的分叉存储库中修改(首先,这会使拉取请求变得愚蠢)。打算用什么方式来解决这个问题?go.modv3/v3go.mod
查看完整描述

2 回答

?
翻翻过去那场雪

TA贡献2065条经验 获得超13个赞

这是您正在寻找的修复程序,我测试了以下文件,它可以正常工作,go.mod


module test


go 1.14


replace periph.io/x/devices/v3 => github.com/lutzky/devices/v3 v3.6.9-newfeature


require (

    periph.io/x/devices/v3 v3.6.9 // indirect

)


我首先安装,periph.io/x/devices/v3

go get periph.io/x/devices/v3


然后我在 ,


格式中插入了替换:go.modreplace periph.io/x/devices/v3 => github.com/lutzky/devices/v3 mainreplace <original_module> => <forked_repo> <branch>


然后我就跑了。之后,替换指令中的替换指令被交换,这是分叉存储库分支上的最新标记,从而为您提供了上面看到的内容。go getmainv3.6.9-newfeaturemain


查看完整回答
反对 回复 2022-08-30
?
繁星点点滴滴

TA贡献1803条经验 获得超3个赞

多亏了 ramaraja-ramanujan@ 的回答和更多的调试,我找到了答案。


TL;DR - 正确答案是:


replace periph.io/x/devices/v3 v3.6.9 => github.com/lutzky/devices/v3 main

                                         // this part was missing ^^^

这将在构建时立即起作用,并且(或)将更改为特定标记。有几个有趣的旁注:go mod tidygo getmain


Go 代理

标签是我自己的;我创建它是为了让它工作。我已经删除了它,但不断替换为 - 无论我清除了多少缓存!运行它原来是在联系 http://proxy.golang.org。为了禁用此功能,我运行了.这用伪版本替换了该行。请注意,这与我的分叉中的当前提交相匹配,而我的分叉和原始存储库都没有 - 它似乎是从现有提交开始并递增的。v3.6.9-newfeaturego mod tidymainv3.6.9-newfeaturestracegoGOPROXY=direct go getv3.6.10-0.20210508194004-cae0146d8900mainv3.6.10v3.6.9


不是子目录/v3

实际上,源存储库(https://github.com/periph/devices)没有子目录。我认为正在发生的事情是该域正在做一些诡计 - 确实要使用浏览器 http://periph.io/x/devices/v3 确实有效。但是,Go 的分辨率似乎在模块路径中采用 final,在这种情况下,不指示子目录(但实际上是对标记名称的限制)。这显然是允许的,并且在 https://golang.org/ref/mod 中进行了讨论,但它并不完全简单。v3periph.io/v3


查看完整回答
反对 回复 2022-08-30
  • 2 回答
  • 0 关注
  • 70 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信