0

我在克隆链接bitbucket上有私人回购http://localhost:7990 http://localhost:7990/scm/gom/bar.git

go.mod好像:

module mod.org/bar

go 1.13

远程存储库中可用的参考:

git ls-remote  http://localhost:7990/scm/gom/bar.git 

From http://localhost:7990/scm/gom/bar.git
d456de4f12785b26ac27ba08cffb76687d1287c8        HEAD
d456de4f12785b26ac27ba08cffb76687d1287c8        refs/heads/master
f948bd47a22c5fb9abed5bff468a10fc24f67483        refs/tags/v1.0.0

.gitconfig改为

[url "http://localhost:7990/scm/gom"]
      insteadOf = https://mod.org

并试图通过获取模块name,得到 no such host错误:

go get -v mod.org/bar

go get lmod.org/bar: unrecognized import path "lmod.org/bar" (https fetch: Get https://lmod.org/bar?go-get=1: dial tcp: lookup lmod.org: no such host)

当我添加扩展.git

go get -v mod.org/bar.git 

go: finding lmod.org/bar.git v1.0.0
go: downloading lmod.org/bar.git v1.0.0
verifying lmod.org/bar.git@v1.0.0: lmod.org/bar.git@v1.0.0: reading https://sum.golang.org/lookup/lmod.org/bar.git@v1.0.0: 410 Gone

go下载带有标签的版本v1.0.0GOPATH = /Users/user/go"

$GOPATH
└── go
     └── pkg
         └── mod
             └── cache
                 └── download
                     └── mod.org
                         └── bar.git
                             └── @v
                                 ├── v1.0.0.info
                                 ├── v1.0.0.lock
                                 └── v1.0.0.zip.tmp882433775

,但我仍然不能在其他 go-project 中使用一个作为依赖项。

4

3 回答 3

3

服务器需要按照https://golang.org/cmd/go/#hdr-Remote_import_paths中描述的协议https://mod.org/bar返回元数据。go-import

存在几个开源实现,例如:

您可以将 HTTPS 服务器和底层存储库的凭据(或访问令牌)存储在一个.netrc文件中,并使用GOPRIVATE环境变量告诉go命令不要在公共代理中查找您的私有存储库。

于 2020-03-12T18:03:42.487 回答
2

你不能在没有.git扩展的情况下使用私有 repo,因为 go 工具不知道你的私有 repo、git 或 svn 或任何其他的版本控制协议。

Forgithub.com或者golang.org它们被硬编码到 go 的源代码中。

go 工具将https在获取您的私人仓库之前进行查询以了解这一点:

https://private/user/repo?go-get=1

如果你的私有仓库不支持https,请使用replacego 模块的语法直接告诉 go 工具:

require private/user/repo v1.0.0

...

replace private/user/repo => private.server/user/repo.git v1.0.0

https://golang.org/cmd/go/#hdr-Remote_import_paths

于 2020-10-12T09:43:24.320 回答
1

解决问题的步骤:

1️⃣ 将模块声明更改go.mod

module mod.org/gomod/bar

go 1.16

bitbucket与存储库结构相同

在此处输入图像描述

repo 对克隆的引用:

http://localhost:7990/scm/gomod/bar.git
ssh://git@mod.org/gomod/bar.git

2️⃣改变.gitconfig:加insteadOfsshhttps

# [url "http://localhost:7990/scm"]
[url "ssh://git@mod.org"]
      insteadOf = https://mod.org

3️⃣ 添加https://mod.org到私有仓库

go env -w GOPRIVATE="mod.org"

❗完成所有准备后,该模块将可以通过go mod download其他模块访问version tags

module mod.org/gomod/foo

go 1.16

require (
   mod.org/gomod/bar v1.0.0-beta.1
)

replace (
   mod.org/gomod/bar => mod.org/gomod/bar.git v1.0.0-beta.1
) 

或手动

go get -u mod.org/gomod/bar.git
go get mod.org/gomod/bar.git@v1.0.0-beta.1
于 2020-04-07T19:36:44.257 回答