Golang模块可以在master以外的分支上使用吗



只要我在master分支上,这个代码就可以工作:

main.go:

package main
import (
datemodlocal "192.168.0.12/gitrepo/go-module-test-dateutil.git"
stringmodlocal "192.168.0.12/gitrepo/go-module-test-stringutil.git"
"fmt"
"github.com/dwschulze/go-module-test-dateutilmod"
"github.com/dwschulze/go-module-test-stringutilmod"
)
func main() {
fmt.Println("github:  " + stringmod.ToUpperCase("test"))
fmt.Println("github:  " + datemod.GetTime().String())
fmt.Println("local:  " + stringmodlocal.ToUpperCase("test"))
fmt.Println("local:  " + datemodlocal.GetTime().String())
}

go.mod:

module module-driver
require (
192.168.0.12/gitrepo/go-module-test-dateutil.git v0.0.1
192.168.0.12/gitrepo/go-module-test-stringutil.git v0.0.1
github.com/dwschulze/go-module-test-dateutilmod v0.0.1
github.com/dwschulze/go-module-test-stringutilmod v0.0.1
)
go 1.15

我需要使用分支dev2进行开发。godocs没有显示对go.mod中的导入路径或require语句需要做什么。如果我将导入语句更改为:

datemodlocal "192.168.0.12/gitrepo/go-module-test-dateutil.git@dev2"

我得到:

$ go run main.go
package command-line-arguments
imports 192.168.0.12/gitrepo/go-module-test-dateutil.git@dev2: can only use path@version syntax with go get

如果我将@dev2移动到go.mod中的require语句

192.168.0.12/gitrepo/go-module-test-dateutil.git@dev2 v0.0.1

我得到

$ go run main.go
go: 192.168.0.12/gitrepo/go-module-test-dateutil.git@dev2@v0.0.1: unrecognized import path "192.168.0.12/gitrepo/go-module-test-dateutil.git@dev2": https fetch: Get "https://192.168.0.12/gitrepo/go-module-test-dateutil.git@dev2?go-get=1": dial tcp 192.168.0.12:443: connect: connection refused

错误消息显示https,这很奇怪,因为在我的~/.gitconfig中我有

[url "dean@192.168.0.12:"] insteadOf = https://192.168.0.12/

设置GOPRIVATE无效。如果我把@dev2放在两个地方,我会得到相同的错误消息。

godocs没有显示任何工作的.gogo.mod文件必须包含哪些内容才能在master以外的分支上使用模块的示例。我认为模块必须在任何分支上工作,因为开发通常在master以外的分支上进行。

有人有.go文件和go.mod在master以外的分支上工作的工作示例吗?

据我所知,在Golang模块(go.mod(中不可能使用分支名称。
而是使用git哈希。

go get -u github.com/your/repo@{git-hash}
Go的工具没有SNAPSHOT或开发或移动依赖关系的概念。依赖关系是固定的,试图通过go get创建分支来规避这一点会导致更多问题。

如果您有移动依赖项:

  1. 向go.mod添加replace指令,使此依赖关系指向它的本地副本
  2. 以您想要的方式管理依赖关系的本地副本,例如,通过定期检查某个分支和git pulling

如果你有一个Go不可用的git服务器:

如果您的VCS服务器不提供中所述的元标记https://golang.org/pkg/cmd/go/#hdr-Remote_import_path必须使用replace指令,并使用VCS手动管理本地副本。

在任何情况下:形式为";192.168.0.12/gitrepo/go模块测试字符串git";(带有.git后缀(是错误的,如中所述https://golang.org/pkg/cmd/go/#hdr-Remote_import_paths:"。git";应该转到";192.168.0.12/gitrepo.git/go模块测试字符串";如果";gitrepo";实际上是回购。

相关内容

  • 没有找到相关文章

最新更新