如何将 Go dep 与 GitLab 子组一起使用

How to use Go dep with GitLab subgroups

我有一个 Go 项目需要来自私有 GitLab 存储库的一些依赖项,例如 git.mydomain.com/myteam/category/subcategory/project.git。 但是我收到了这个错误。

ensure Solve(): remote repository at https://git.mydomain.com/myteam/category.git does not exist or is inaccessible: : exit status 128

我认为最好的解决方案是使用像 athens 这样的 proxy-server。您可以添加 Gitlab-Credentials 并将其用作 proxy-server。然后雅典将处理身份验证。

此问题在 GitLab support tracker 上进行了详细讨论。

TL;DR;这是(故意)broken for private repos:

Is [your group] private? If so, this is expected behavior, and I would recommend reading the discussion from #1337 (comment 36293613) onwards. In this case, we have decided to maximize security/privacy at the slight expense of usability. The recommended workaround is to specifically add .git to your URL.

我找到的唯一解决方案是使用 go get's support for .netrc,它解决了 dep 以及现代 Go 模块的问题。

  1. api 范围内在 GitLab 上创建个人访问令牌:

  2. 创建一个~/.netrc文件:

     machine gitlab.com
         login <your gitlab username>
         password <the token created in step 1>
    
  3. 稍微保护一下您的 .netrc 文件:

     chmod 600 ~/.netrc
    
  4. 利润

这现在应该可以工作了:

    dep ensure -add gitlab.com/<company>/<subgroup>/<project>

或 去获取 gitlab.com///

如果您使用的是私有 GitLab 安装,我相信您会在适用的情况下将 gitlab.com 替换为适当的主机名。