gpt4 book ai didi

git - 如何在另一个私有(private) Go 项目(作为模块)中导入私有(private) Go 库(作为模块)

转载 作者:IT王子 更新时间:2023-10-29 02:00:30 26 4
gpt4 key购买 nike

我正在将一些私有(private) Go 项目移动到 GitLab,同时摆脱 Godeps,Go depvendor 目录等等,因为我只想使用 Go 模块。

我使用的是 Go 版本:go1.12.6 linux/amd64

  • 我在 gitlab.com/my-company/my-team/my-library 上有一个私有(private)“库”项目/git 存储库。这作为带有 go.modgo.sum 的 Go 模块。
  • 我想使用 my-library 作为另一个项目的依赖项,这个:gitlab.com/my-company/my-team/my-project

URL 的结构是一样的,唯一改变的是存储库的名称。

我在 my-project 中导入 my-library 时遇到各种错误。

  • 如何将 Go 模块作为私有(private)仓库导入到其他 Go 模块中作为私有(private)仓库?
  • 下面的命令输出有什么问题?

我知道 GitLab token 是有效的,因为 go get 命令会自己计算出 my-library 的提交 ID。无论如何,我已经完成了以下操作(请参阅 https://docs.gitlab.com/ee/user/profile/personal_access_tokens.html):

git config \
--global \
url."https://token_name:token_val@gitlab.com".insteadOf \
"https://gitlab.com"

这些是错误信息:

$ go get -u gitlab.com/my-company/my-team/my-library.git
go: finding gitlab.com/my-company/my-team/my-library.git latest
go: gitlab.com/my-company/my-team/my-library.git@v0.0.0-20190802120216-712a10fb5fac: parsing go.mod: unexpected module path "gitlab.com/my-company/my-team/my-library"
go get: error loading module requirements
$
$ go get -u gitlab.com/my-company/my-team/my-library
go get gitlab.com/my-company/my-team/my-library: git ls-remote -q https://gitlab.com/my-company/my-team.git in /home/foo/Development/go-workspace/pkg/mod/cache/vcs/9be637426eac43b329899d57d9375d12246f2cc0f6ddd098446bc42ed1ca534d: exit status 128:
remote: The project you were looking for could not be found.
fatal: repository 'https://token_name:token_val@gitlab.com/my-company/my-team.git/' not found
$
$ GO111MODULE=off go get -u gitlab.com/my-company/my-team/my-library.git
package gitlab.com/my-company/my-team/my-library.git: no Go files in /home/foo/Development/go-workspace/src/gitlab.com/my-company/my-team/my-library.git
$
  • 第一次尝试是我认为我应该使用的尝试,但它不起作用,我也不知道为什么。
    • 我认为发生这种情况是因为不知何故在项目中已经存在这样的依赖关系。但是当执行 go mod graph | grep gitlab 我发现一个空输出,即没有冲突的依赖关系。
  • 第二次尝试可能要避免,因为 URL 不以 .git 结尾,并且(出于某种我不理解的原因)URL 在 级别被剪切我的团队
  • GO111MODULE=off 似乎强制 go get checkin $GOPATH 我认为我应该完全避免,但我只是尝试查看我是否能够获取该依赖项。

最佳答案

我肯定会建议尝试使用 Go 1.13 beta:

$ go get golang.org/dl/go1.13beta1
$ go1.13beta1 download
$ go1.13beta1 get foo

或者更好的是,试试最新的 Go on tip/master(考虑到 Go 1.13 beta1 版本此时已经有一个多月了):

$ go get golang.org/dl/gotip
$ gotip download
$ gotip get foo

Go 1.13 改进了使用私有(private)存储库的几个方面(包括 CL 170879 等改进),并且与 Go 1.12 相比,它通常具有更好的错误消息。

对于您的第一条错误消息:

$ go get -u gitlab.com/my-company/my-team/my-library.git
go: finding gitlab.com/my-company/my-team/my-library.git latest
go: gitlab.com/my-company/my-team/my-library.git@v0.0.0-20190802120216-712a10fb5fac:
parsing go.mod: unexpected module path "gitlab.com/my-company/my-team/my-library"
go get: error loading module requirements

那是go命令提示模块的导入/需要方式与它在 module 中声明自己身份的方式不匹配其线go.mod .如果模块foo正在导入模块 bar , 然后 foo需要引用bar同样的方式 barmodule 上声明其身份bar行的 go.mod文件。

换句话说,用于导入模块(或go get 模块)的导入路径需要以在module 上声明的确切模块路径开始。导入模块的行 go.mod .您可能需要更改导入程序以匹配在 module 上声明的表单go.mod 中的行文件,或者您可能需要更改 module go.mod 中的行匹配进口商使用的表格,但他们不能不同意。如果他们不同意,您将收到报告的第一个错误。

一般来说,关于如何将私有(private)存储库与 Go 模块一起使用,您有几种选择。这两篇博文概述了几个问题并涵盖了一些方法,如果您还没有读过它们,非常值得一读:

最后,如果仍然不清楚发生了什么,您可能应该尝试 go get -v foogo get -v -x foo :

  • -v标记为 go get要求打印更多详细信息,包括 HTTPS requests ,但请注意,根据远程存储库的配置方式,可能会出现某些“错误”,例如 404 错误。

  • 如果问题的本质还是不清楚,你也可以试试更冗长的go get -v -x foo ,其中还显示了正在发出的 git 或其他 VCS 命令。如果有必要,您通常可以在 go 的上下文之外执行相同的 git 命令。用于故障排除的工具。

关于git - 如何在另一个私有(private) Go 项目(作为模块)中导入私有(private) Go 库(作为模块),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57326616/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com