如何将 Go 模块替换为 fork @ master 的主要版本

问题描述 投票:0回答:2

我无法使用 go.mod 通过使用具有

/v2
/ 主要版本映射的项目的任何固定分支来映射分叉。

我有以下 go.mod:

go 1.18

require (
    github.com/versent/saml2aws/v2 v2.35.0
)

注意该模块需要

/v2
,否则会得到
v2.17.0+incompatible

  1. 我在这里分叉了该项目:https://github.com/marcottedan/saml2aws
  2. 我在这里创建了一个分支
    add-aad-entropy-PhoneAppNotification
    https://github.com/marcottedan/saml2aws/tree/add-aad-entropy-PhoneAppNotification
  3. 我尝试修改或不修改我的 fork go mod 中 go.mod 的第一行,从
    module github.com/versent/saml2aws/v2
    module github.com/marcottedan/saml2aws/v2

我正在使用以下指令,但没有一个起作用:

这会下载我的叉子的标签

2.35.0
,即使我要求它获取
master

dmarcotte@dmarcottes% go get -d github.com/marcottedan/saml2aws/v2@master
go: downloading github.com/marcottedan/saml2aws/v2 v2.35.0
go: github.com/marcottedan/saml2aws/[email protected]: parsing go.mod:
        module declares its path as: github.com/versent/saml2aws/v2
                but was required as: github.com/marcottedan/saml2aws/v2

我也尝试修改我的

go.mod
:

replace github.com/versent/saml2aws/v2 => github.com/marcottedan/saml2aws/v2 v2.35.0

-> Can't find a way to target master with the /v2 pattern

如果我删除 /v2 并只使用@master,它不会关心并获取 v1 中的最新标签(在 saml2aws 迁移到 go mod 之前被命名为 2.17.0+不兼容)

dmarcotte@dmarcottes % go get -d github.com/marcottedan/saml2aws@master   
go: github.com/marcottedan/saml2aws@master: github.com/marcottedan/[email protected]: invalid version: go.mod has post-v1 module path "github.com/marcottedan/saml2aws/v2" at revision f05a14a2b3f2

我在这里迷路了。

git go replace fork go-modules
2个回答
10
投票

经过大量挖掘,以下是我发现似乎有效的步骤:

  1. 创建任何项目的分支
  2. go.mod
    第一行更改为您的新分叉名称,提交并推送
  3. 在分支或主节点中提交并推送您需要的任何更改
  4. 在您的原始项目中,执行以下命令:
    go get -d -u github.com/marcottedan/saml2aws/v2@master
    ,其中@version 是您的分支名称。
  5. 在您的
    go.mod
    中,添加以下替换指令:
    replace github.com/versent/saml2aws/v2 v2.35.0 => github.com/marcottedan/saml2aws/v2 master
  6. 每次在分叉中推送提交时,请重复步骤 4。

最后你的 go.mod 应该是这样的:

module <yourname>

go 1.18

require (
    github.com/versent/saml2aws/v2 v2.35.0
)

replace github.com/versent/saml2aws/v2 v2.35.0 => github.com/marcottedan/saml2aws/v2 master

请注意,如果您仅单独工作,则可以使用替换指令来映射驱动器上的本地文件夹。但这往往不适用于队友,因为他们在拉取代码时还必须检查相同的精确分叉路径。这是一个例子:

module <yourname>

go 1.18

require (
    github.com/versent/saml2aws/v2 v2.35.0
)

replace github.com/versent/saml2aws/v2 => /Users/dmarcotte/git/saml2aws/

0
投票

在解决同样的问题时,我发现 Go 更新了他们的替换指令。 丹尼尔的解决方案中的大部分步骤仍然有效。小事是 Go 不允许您在替换指令的末尾添加

branchname
。所以这是我采取的步骤:

  1. 步骤 1-3 的步骤相同
  2. 当我把零钱推到叉子上时,我会放置一个任意标签,即
    git tag v0.0.1 && git push origin --tags
  3. 添加替换指令
    replace github.com/versent/saml2aws/v2 v2.35.0 => github.com/marcottedan/saml2aws/v2 v0.0.1
  4. 每当我推送更改时,我都会在 fork 中创建新标签,推送它们并更新使用项目中的替换指令。 Go 似乎理解这一点,并将为新版本运行
    go get

总而言之:

module <yourname>

go 1.18

require (
    github.com/versent/saml2aws/v2 v2.35.0
)

replace github.com/versent/saml2aws/v2 v2.35.0 => github.com/marcottedan/saml2aws/v2 v0.0.1
© www.soinside.com 2019 - 2024. All rights reserved.