0

在 bitbucket.org 中有一个 git repo

reponame/
    .git/
    integration1/
    integration2/
    integration-common/
    └── util
        ├── go.mod
        └── readascii.go

模块目录是 git 存储库的子目录。存储库用 标记v0.0.1

这是 go.mod

module bitbucket.org/orgname/reponame/integration-common/util
go 1.14

当我go get为这个模块做时,我收到以下错误

go get bitbucket.org/orgname/reponame/integration-common/util@v0.0.1

go: downloading bitbucket.org/orgname/reponame v0.0.1
go get bitbucket.org/orgname/reponame/integration-common/util@v0.0.1: module bitbucket.org/orgname/reponame@v0.0.1 found, but does not contain package bitbucket.org/orgname/reponame/integration-common/util

如果我使用网络浏览器查看,我可以在标签下看到integration-common/util/bitbucket.org 中的目录。v0.0.1go.mod 的内容如上所示。

更奇怪的是, go get 确实设法下载了存储库中的其他目录(integration1/integration2/)。出于某种原因,它认为v0.0.1不包含该integration-common/目录,即使 bitbucket 在那里为该标签显示它。

我使用 ssh 而不是 https 下载,因为 https 在我们的 bitbucket 存储库中需要 2fa:

〜/ .gitconfig:

url "git@bitbucket.org:"]insteadOf = https://bitbucket.org/

我知道在使用 go get 时 bitbucket 很奇怪。我错过了什么,或者这是 go get 和 bitbucket 的错误?

4

1 回答 1

0

该标签适用于位于 repo ( )v0.0.1根目录的模块。bitbucket.org/orgname/reponame

子目录中的go.mod文件integration-common/util使该子目录成为自己的模块,具有自己的版本空间和自己的版本标签集,需要采用以下形式integration-common/util/v0.0.1(请参阅https://golang.org/doc/modules/管理源#tmp_4)。

那是:

  • v0.0.1标签适用于 module bitbucket.org/orgname/reponame,它不包含包,因为它位于包含另一个go.mod文件的目录下。
  • 该模块bitbucket.org/orgname/reponame/integration-common/util存在并包含该包,但它没有版本v0.0.1,因为子目录模块的版本标记需要与该子目录相对应的显式前缀。

一般来说,最简单的方法是只拥有一个go.mod文件——位于 repo 根目录——并避免在子目录中嵌套额外的模块。

于 2021-02-12T20:55:32.467 回答