【问题标题】:Download a GitLab private repository下载 GitLab 私有存储库
【发布时间】:2014-08-19 05:41:16
【问题描述】:

我想使用curl 在 GitLab 中下载我的私人仓库。我知道我可以使用 Gitlab API,但由于某种原因,它不起作用。

这可能吗?当我尝试这样做时,它总是返回登录页面。

【问题讨论】:

    标签: git curl github gitlab


    【解决方案1】:

    可以,但需要对自己进行身份验证(如“Gitlab API: How to generate the private token”)

    curl http://gitlab.server/api/v3/session --data 'login=myUser&password=myPass'
    

    然后用private token:

    curl --header "PRIVATE-TOKEN: QVy1PB7sTxfy4pqfZM1U" "http://example.com/api/v3/projects"
    

    或者,在您的情况下,获取repository files

    GET /projects/:id/repository/files
    

    或者,直接下载一个文件。

    【讨论】:

    • 有没有办法让我获得比可下载网址更简单的原始网址?例如,可以在浏览器中查看的图像文件的公共 url。有什么方法可以使用 API 为私有仓库生成公共 url?
    • @KhurshidAlam 你的意思是每个人都可以访问的公共网址,即使它来自私人回购?
    • 是的。但只有一些象征。就像 bitbucket 或 github 一样。例如,bitbucket 使用附加到文件原始 url 的令牌,以便可以公开查看。 https://bytebucket.org/$username/$repo/raw/$sha/$filename.jpg?token=$sometoken
    【解决方案2】:

    可能的,只需按照以下步骤操作:

    1. 首先,您必须创建一个“个人访问令牌”:

      1. 转到Your Profile > Settings > Access Tokens

      2. 输入“个人访问令牌”的名称。

      3. 勾选“api访问认证用户的API”

      4. 点击“创建个人访问令牌”

      5. 页面将重新加载并保存您的新令牌。

      6. 确保将令牌保存在安全的地方,您将无法再次查看它。

    2. 现在您已经有了“个人访问令牌”,您需要获取项目 ID 才能使用 API:

      1. 转到https://gitlab.com/api/v4/projects?private_token=XXXXXXXXXXXXXXXXXXXX(用您的新令牌替换 Xs)

      2. 从 json 中获取项目的 id。

      (或者你可以从它的网页复制项目 ID)

    3. 现在你可以打电话了:

       wget -O your_project.tar.gz https://gitlab.com/api/v4/projects/0000000/repository/archive?private_token=XXXXXXXXXXXXXXXXXXXX
      

    这会将您的项目下载为.tar.gz 文件。

    编辑:您可以通过将 &sha=... 参数添加到 url 来获取特定提交/标记的 tarball,例如: https://gitlab.com/api/v4/projects/24470128/repository/archive?private_token=XXXXXXXXXXXXX&sha=606e81c69eff27eccbbc59a0546a9439780dff55

    【讨论】:

    • api v3 不再受支持 :(
    • 只需将 v3 替换为 v4 ;)
    • 知道如何获取特定标签的压缩包吗?
    • 最终 URL 将返回一个文件名复杂的文件:myrepo-master-355be558eac20b8747727e82377522fad73b5f6e.zip。是否可以强制为档案命名?像“archive.zip”。我需要它,因为我无法在作曲家存储库中指定文件名。
    • 好吧,-O your_project.tar.gz 应该为您提供正确的名称。另一种选择是使用curl 'https://gitlab.com/api/v3/projects/0000000/repository/archive?private_token=XXXXXXXXXXXXXXXXXXXX' > your_project.tar.gz
    【解决方案3】:

    您可以使用您的私有令牌(在“个人资料设置”中找到)访问任何资源。只需浏览到您要下载的存储库文件,复制“原始”文件链接并附加 ?private_token=...

    例子:

    curl https://git.local/user1/myrepo/raw/master/myfile.txt?private_token=ahgiretherghaeoi
    

    【讨论】:

    • 问题是关于下载整个仓库,而不仅仅是一个文件。
    【解决方案4】:

    如果您需要在 CI 运行中执行此操作,并且您的私有存储库位于同一台服务器上,您应该能够同时使用 git submodules 克隆其他存储库。从 GitLab 8.12 开始使用 ${CI_JOB_TOKEN}another option

    【讨论】:

      【解决方案5】:

      如果您有自己的“个人访问令牌”(如其他答案中所述),您可以使用 curl 命令下载存储库分支的存档:

      curl -k --header "PRIVATE-TOKEN: xxxx" https://gitlab.xxxxx/api/v4/projects/<projectID>/repository/archive?sha=630bc911c1c20283d3980dcb95fd5cb75479bb9c -o myFilename.tar.gz
      

      ProjectID 显示在 repo 的主页上。 从下拉列表中选择所需的分支并将右侧的值复制为 SHA 后,您可以从 webUI 中获取 SHA 值。请看下面的截图:

      另一种方法是通过wget 像这样:

      wget --no-check-certificate -O myFilename.zip --header=PRIVATE-TOKEN:xxxx "https://gitlab.xxxx/api/v4/projects/<projectID>/repository/archive.zip?sha=630bc911c1c20283d3980dcb95fd5cb75479bb9c"
      

      希望对你有帮助。

      【讨论】:

      • 什么是gitlab.xxxxx?我假设. xxxxx 不是一个有效的顶级域...
      • gitlab.xxxxx 是属于自托管其 Gitlab 实例的私有实体的 URL 的通用表示。例如 gitlab.cnn.com 或 gitlab.facebook.com 或 gitlab.mycompany.com 等。
      • 哦,谢谢。在我们公司,私人仓库就像gitlab.com/parsiqio/portal/monitoring,但猜想该解决方案也适用于自托管子域......虽然他们不必以gitlab.开头要一丝不苟=P
      猜你喜欢
      • 2017-02-03
      • 2015-07-24
      • 2014-10-30
      • 1970-01-01
      • 1970-01-01
      • 2020-04-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多