英文:
How to replace a Go Module with a major version to a fork @ master
问题
我在使用 go.mod 时遇到了问题,无法通过任何固定的分支映射到一个使用 /v2
或主要版本映射的项目的 fork。
我有以下的 go.mod 文件:
go 1.18
require (
github.com/versent/saml2aws/v2 v2.35.0
)
请注意,该模块需要 /v2
,否则它将获取 v2.17.0+incompatible
。
- 我在这里 fork 了该项目:https://github.com/marcottedan/saml2aws
- 我在这里创建了一个分支
add-aad-entropy-PhoneAppNotification
:https://github.com/marcottedan/saml2aws/tree/add-aad-entropy-PhoneAppNotification
- 我尝试修改我的 fork 的 go.mod 文件的第一行,将
module github.com/versent/saml2aws/v2
改为module github.com/marcottedan/saml2aws/v2
。
我尝试了以下指令,但都没有起作用:
这个命令下载了我 fork 的标签 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/v2@v2.35.0: 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
-> 无法找到通过 /v2 模式来定位 master 的方法
如果我去掉 /v2,只使用 @master,它不会关心,而是获取 v1 中的最新标签(在 saml2aws 迁移到 go mod 之前,它被命名为 2.17.0+incompatible):
dmarcotte@dmarcottes % go get -d github.com/marcottedan/saml2aws@master
go: github.com/marcottedan/saml2aws@master: github.com/marcottedan/saml2aws@v1.8.5-0.20220520001825-f05a14a2b3f2: invalid version: go.mod has post-v1 module path "github.com/marcottedan/saml2aws/v2" at revision f05a14a2b3f2
我在这里感到相当困惑。
英文:
I have trouble mapping a fork through any pinned branch with go.mod that use a project with the /v2
/ major version mapping.
I have the following go.mod:
go 1.18
require (
github.com/versent/saml2aws/v2 v2.35.0
)
Notice the module requires the /v2
, otherwise it would get v2.17.0+incompatible
.
- I forked the project here: https://github.com/marcottedan/saml2aws
- I created a branch
add-aad-entropy-PhoneAppNotification
here:https://github.com/marcottedan/saml2aws/tree/add-aad-entropy-PhoneAppNotification
- I tried to modify, or not, the first line of go.mod in my fork go mod from
module github.com/versent/saml2aws/v2
tomodule github.com/marcottedan/saml2aws/v2
I'm using the following directives and none are working:
This downloads the tag 2.35.0
of my fork even though I ask it to get 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/v2@v2.35.0: parsing go.mod:
module declares its path as: github.com/versent/saml2aws/v2
but was required as: github.com/marcottedan/saml2aws/v2
I also tried modifying my 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
If I drop the /v2 and just go with @master, it doesn't care and get the latest tag in v1 (which was named 2.17.0+incompatible before saml2aws migrated to go mod)
dmarcotte@dmarcottes % go get -d github.com/marcottedan/saml2aws@master
go: github.com/marcottedan/saml2aws@master: github.com/marcottedan/saml2aws@v1.8.5-0.20220520001825-f05a14a2b3f2: invalid version: go.mod has post-v1 module path "github.com/marcottedan/saml2aws/v2" at revision f05a14a2b3f2
I'm quite lost here.
答案1
得分: 8
经过一番搜索,我找到了一些看起来有效的步骤:
- 创建一个项目的分支
- 将
go.mod
文件的第一行改为你的新分支名称,提交并推送 - 在分支或主分支上提交和推送任何需要的更改
- 在原始项目中执行以下命令:
go get -d -u github.com/marcottedan/saml2aws/v2@master
,其中@version是你的分支名称 - 在你的
go.mod
文件中添加以下替换指令:replace github.com/versent/saml2aws/v2 v2.35.0 => github.com/marcottedan/saml2aws/v2 master
- 每次在你的分支上提交代码后,重复第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/
英文:
After a lot of digging, here are the steps I found that seem to be working:
- Create a fork of any project
- Change the
go.mod
first line to your new fork name, commit & push - Commit&Push any change you need, in a branch or in master
- In your original project, do the following command:
go get -d -u github.com/marcottedan/saml2aws/v2@master
where the @version is your branch name. - In your
go.mod
, add the following replace directive:replace github.com/versent/saml2aws/v2 v2.35.0 => github.com/marcottedan/saml2aws/v2 master
- Every time you push a commit in your fork, repeat step 4.
At the end your go.mod should look like this:
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
Note that if you're only working in solo, you can use the replace directive to map a local folder on your drive. But this tend to not work well with teammates since they must also have the same exact fork path checked out while pulling the code. Here's an example:
module <yourname>
go 1.18
require (
github.com/versent/saml2aws/v2 v2.35.0
)
replace github.com/versent/saml2aws/v2 => /Users/dmarcotte/git/saml2aws/
通过集体智慧和协作来改善编程学习和解决问题的方式。致力于成为全球开发者共同参与的知识库,让每个人都能够通过互相帮助和分享经验来进步。
评论