英文:
Can a Go module be published in the same path as the previous non-module module?
问题
我有一个小型库,一直托管在非模块仓库中,但现在我想将其转换为Go模块。
我成功执行了以下操作:
go mod init
go mod tidy
go.mod
和go.sum
文件已经创建,并且库仍然通过了测试。
之前的版本是v2.0.0
,所以我将版本增加到了v3.0.0
,并在go.mod
中的模块名称末尾添加了/v3
。根据我在网上看到的,这就是所需的全部步骤。
我的go.mod
文件如下所示:
module tssgit.reyrey.com/teschste/go-utils/v3
go 1.19
require (
github.com/lib/pq v1.10.9
golang.org/x/text v0.9.0
)
然后,我将库发布到了我们的内部git服务器,并认为一切准备就绪。
当我尝试将该库添加到一个新的Go模块项目时,我收到了以下错误信息:
Installing: tssgit.reyrey.com/teschste/go-utils/v3
Installing dependency: tssgit.reyrey.com/teschste/go-utils/v3
go: module tssgit.reyrey.com/teschste/go-utils@upgrade found (v2.0.0+incompatible), but does not contain package tssgit.reyrey.com/teschste/go-utils/v3
Failed to add dependencies: exit status 1
我发现,如果我将v3.0.0
发布到一个新的路径(tssgit.reyrey.com/teschste/go-utils2
),我就能成功将其添加到我的新项目中,即使我再次增加了主版本号。
我是否遗漏了某些允许我继续在相同路径发布的步骤,还是说这是不可能做到的?
非常感谢您的帮助!
英文:
I have a small library that has always been hosted in a non-module repository but I now want to convert it to a Go module.
I successfully performed:
go mod init
go mod tidy
The go.mod
and go.sum
files were created with no errors and the library still passes testing.
The previous version was v2.0.0
, so I incremented the version to v3.0.0
and added /v3
to the end of the module name in go.mod
. From what I have seen online, that is all that was necessary.
My go.mod
files looks like this:
module tssgit.reyrey.com/teschste/go-utils/v3
go 1.19
require (
github.com/lib/pq v1.10.9
golang.org/x/text v0.9.0
)
I then published the library to our internal git server and thought I was ready to go.
When I attempted to add the library to a new Go module project, I received the following:
Installing: tssgit.reyrey.com/teschste/go-utils/v3
Installing dependency: tssgit.reyrey.com/teschste/go-utils/v3
go: module tssgit.reyrey.com/teschste/go-utils@upgrade found (v2.0.0+incompatible), but does not contain package tssgit.reyrey.com/teschste/go-utils/v3
Failed to add dependencies: exit status 1
I found that if I published v3.0.0
to a new path (tssgit.reyrey.com/teschste/go-utils2
), I was able to successfully add it to my new project, even if I again incremented the major version.
Am I missing something that would allow me to continue publishing in the same path, or is that just something you cannot do?
Any help would be appreciated!
答案1
得分: 1
是的,这是支持的。版本子目录是可选的。
我找到了一个会导致你看到的错误的情况。当主分支没有更新(仍然指向标签v2.0.0
),并且新的标签v3.0.0
没有推送到服务器时,就会发生这种情况。请仔细检查以确保远程仓库已经更新。
如果远程仓库已经更新但仍然无法工作,你可以按照以下步骤缩小问题范围:
-
使用
-x
选项运行go get
命令:$ go get -x tssgit.reyrey.com/teschste/go-utils/v3
-
进入输出中显示的目录。目录路径类似于:
/home/username/go/pkg/mod/cache/vcs/96f42aa32430149c99ad6625ceafc5b59e047b9e11d6a03f687d59845b53b2d5
-
在该目录中,运行
git ls-remote -q origin
命令并检查输出。下面的示例是在我的机器上无法工作时的输出。你会看到HEAD
和v2.0.0
都指向相同的提交ID,并且没有v3.0.0
。$ git ls-remote -q origin 5ac4c172806e80461086ea9feb485cec0b6a27f0 HEAD 5ac4c172806e80461086ea9feb485cec0b6a27f0 refs/heads/main bbdc583c0b83489db1a30fa6ca8559ffa295a74d refs/heads/other-branch 5ac4c172806e80461086ea9feb485cec0b6a27f0 refs/tags/v2.0.0
英文:
Yes, this is supported. And the version subdirectory is optional.
I found one case that will result in the error you saw. This happens when the main branch is not updated (still points to the tag v2.0.0
) and the new tag v3.0.0
is not pushed to the server. Please check carefully to make sure the remote repository has been updated.
If the remote repository has been updated but it still does not work, you can narrow down the issue like this:
-
run
go get
with the-x
option:$ go get -x tssgit.reyrey.com/teschste/go-utils/v3
-
cd
into the directory shown in the output. The directory path is something like this:/home/username/go/pkg/mod/cache/vcs/96f42aa32430149c99ad6625ceafc5b59e047b9e11d6a03f687d59845b53b2d5
-
in this directory, run
git ls-remote -q origin
and check the output. The example below is the one on my machine when it does not work. You see that bothHEAD
andv2.0.0
point to the same commit id, and there is notv3.0.0
.$ git ls-remote -q origin 5ac4c172806e80461086ea9feb485cec0b6a27f0 HEAD 5ac4c172806e80461086ea9feb485cec0b6a27f0 refs/heads/main bbdc583c0b83489db1a30fa6ca8559ffa295a74d refs/heads/other-branch 5ac4c172806e80461086ea9feb485cec0b6a27f0 refs/tags/v2.0.0
通过集体智慧和协作来改善编程学习和解决问题的方式。致力于成为全球开发者共同参与的知识库,让每个人都能够通过互相帮助和分享经验来进步。
评论