带有专用gitlab(ssh)的Goland模块

带有专用gitlab(ssh)的Goland模块,go,go-modules,Go,Go Modules,你好!我尝试从glide迁移到go模块(私有gitlab repos) 并通过ssh检查代码 我有一个从私有gitlab repo导入的简单项目 go.mod看起来像: module my.private.package/modtest go 1.12 require my.private.package/statistics v1.0.0 当我尝试构建我的应用程序或运行测试时,我得到: go: my.private.package/statistics@v1.0.0: unrecogni

你好!我尝试从glide迁移到go模块(私有gitlab repos) 并通过ssh检查代码

我有一个从私有gitlab repo导入的简单项目

go.mod看起来像:

module my.private.package/modtest

go 1.12

require my.private.package/statistics v1.0.0
当我尝试构建我的应用程序或运行测试时,我得到:

go: my.private.package/statistics@v1.0.0: unrecognized import path "my.private.package/statistics" (parse https://my.private.package/statistics?go-get=1: no go-import meta tags ())
go: error loading module requirements
我尝试将设置添加到git配置:

[url "ssh://git@my.gitlab.server:9999"]
        insteadOf = https://my.private.package
但是仍然会出现这个错误

有什么办法使它起作用吗?
多谢各位

您使用的是什么版本的围棋?如果是Go 1.13或更高版本,默认是通过proxy.golang.org下载模块。您可以使用
GOPRIVATE
环境变量为一组特定的包更改该值

这里有一段引用自《go help module private》,我强烈建议您阅读全文。直接获取模块后,它应该使用与模块之前相同的
git
/
ssh
逻辑

GOPRIVATE环境变量控制go命令的模块 认为是私有的(不公开),因此不应使用 代理或校验和数据库。变量是以逗号分隔的 模块路径前缀的全局模式(语法为Go的path.Match)。 比如说,

GOPRIVATE=*.corp.example.com,rsc.io/private

使go命令将任何具有路径前缀的模块视为专用模块 匹配任一模式,包括git.corp.example.com/xyzy、rsc.io/private、, 和rsc.io/private/qux


我以前处理过Go模块和一个私有GitLab。我们的私有GitLab有组和子组。您可能缺少的部分是
~/.netrc
,并且您可能具有不正确的全局git配置

我已经做了一个GitHub的要点。你可以在这里找到它:

您可以找到粘贴在下面的要点:

问题
go
命令行工具需要能够从您的私有GitLab获取依赖项,但需要身份验证

这假设您的私有GitLab托管在
privategitlab.company.com

环境变量 建议使用以下环境变量:

export GO111MODULE=on
export GOPRIVATE=privategitlab.company.com
以上几行可能最适合您的shell启动,比如
~/.bashrc

解释
GO111MODULE=on
告诉Golang命令行工具您正在使用模块。我没有在没有使用 私人GitLab上的Golang模块

GOPRIVATE=privategitlab.company.com
告诉Golang命令行工具不要将公共internet资源用于主机名 已列出(如公共模块代理)

从您的私人GitLab获取个人访问令牌 为了进一步验证这些说明,请遵循。 我知道Golang命令行工具需要
read_api
作用域才能工作,我可能怀疑
read_repository
嗯,但是还没有证实这一点

设置
~/.netrc
为了让Golang命令行工具向GitLab进行身份验证,最好使用
~/.netrc
文件

要创建不存在的文件,请运行以下命令:

touch~/.netrc
chmod 600~/.netrc
现在编辑文件的内容以匹配以下内容:

machine privategitlab.company.com login USERNAME_HERE password TOKEN_HERE
Host privategitlab.company.com
  Hostname privategitlab.company.com
  User USERNAME_HERE
  IdentityFile ~/.ssh/id_rsa
其中,
USERNAME\u此处
替换为您的GitLab用户名,
TOKEN\u此处
替换为在 上一节

常见错误 不要设置一个全局git配置,其内容如下:

git config——全局url。“git@privategitlab.company.com:“.代替”https://privategitlab.company.com"
我相信在撰写本文时,Golang命令行工具并不完全支持SSH git,这可能会导致 与
~/.netrc
冲突

额外好处:SSH配置文件 要经常使用
git
工具,而不是Golang命令行工具,设置
~/.ssh/config
文件非常方便。 为此,请运行以下命令:

mkdir~/.ssh
chmod 700~/.ssh
touch~/.ssh/config
chmod 600~/.ssh/config
请注意,上面的文件和目录上的权限是SSH在其默认配置下工作所必需的 大多数Linux系统

然后,编辑
~/.ssh/config
文件以匹配以下内容:

machine privategitlab.company.com login USERNAME_HERE password TOKEN_HERE
Host privategitlab.company.com
  Hostname privategitlab.company.com
  User USERNAME_HERE
  IdentityFile ~/.ssh/id_rsa
请注意上述文件中的间距问题,如果文件不正确,将使文件无效

其中,
USERNAME\u HERE
是您的GitLab用户名,
~/.ssh/id\u rsa
是文件系统中ssh私钥的路径。
您已经将其公钥上载到GitLab。以下是。

您的代码是否托管在自定义站点上?如果是这样,您应该让您的站点为包含回购信息的包返回一个元标记,用于
go-get
。更多信息请访问:leaf bebop,我有一个私有的gitlab服务器。HTTPS-连接是被禁止的-只有sshYes,我知道这一点。我要求您实现Go的远程导入协议,该协议由链接指定。问题不在于你不能用git获取代码,而在于它前面的步骤:通过使用远程导入协议,知道从哪里获取代码,这是由
go-get
控制的。