带有专用gitlab(ssh)的Goland模块
你好!我尝试从glide迁移到go模块(私有gitlab repos) 并通过ssh检查代码 我有一个从私有gitlab repo导入的简单项目 go.mod看起来像:带有专用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
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
控制的。