只要我在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没有显示任何工作的.go
和go.mod
文件必须包含哪些内容才能在master
以外的分支上使用模块的示例。我认为模块必须在任何分支上工作,因为开发通常在master
以外的分支上进行。
有人有.go
文件和go.mod
在master以外的分支上工作的工作示例吗?
据我所知,在Golang模块(go.mod(中不可能使用分支名称。
而是使用git哈希。
go get -u github.com/your/repo@{git-hash}
go get
创建分支来规避这一点会导致更多问题。
如果您有移动依赖项:
- 向go.mod添加
replace
指令,使此依赖关系指向它的本地副本 - 以您想要的方式管理依赖关系的本地副本,例如,通过定期检查某个分支和
git pull
ing
如果你有一个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";实际上是回购。