1

只要我在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())
}

去.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. 如果我将导入语句更改为:

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到 require 语句go.mod

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 以外的分支上工作的示例?

4

1 回答 1

-4

Go 的工具没有 SNAPSHOT 或开发或移动依赖项的概念。依赖关系是固定的,试图通过go get分支来规避这一点会导致更多问题。

如果您有移动依赖项:

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

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

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

在任何情况下:如https://golang.org/pkg/cmd中所述,“192.168.0.12/gitrepo/go-module-test-stringutil.git”(带有 .git 后缀)形式的导入路径是错误的/go/#hdr-Remote_import_paths:如果“gitrepo”实际上是存储库,则“.git”应该转到“192.168.0.12/gitrepo.git/go-module-test-stringutil”。

于 2020-09-23T06:22:01.330 回答