【问题标题】:Using bash command to download all gitlab projects at once使用 bash 命令一次下载所有 gitlab 项目
【发布时间】:2019-12-26 09:18:47
【问题描述】:

我的 gitlab 帐户中有 200 多个项目。我想全部下载。我正在使用以下命令。

TOKEN="XXXXXXXXXX";
PREFIX="ssh_url_to_repo";
curl --header "PRIVATE-TOKEN: $TOKEN" http://vrath.gitlabtest.com/api/v4/projects?per_page=100 |
    grep -o "\"$PREFIX\":[^ ,]\+" |
    awk -F ':' '{printf "ssh://"; for (i=2; i<NF; i++) printf $i "/"; print $NF}' |
    xargs -L1 git clone

上述命令运行良好,但仅下载 100 个项目。我尝试进行分页,但它不起作用。

TOKEN="XXXXXXXXXX";
PREFIX="ssh_url_to_repo";
curl --header "PRIVATE-TOKEN: $TOKEN" http://vrath.gitlabtest.com/api/v4/projects?per_page=100&page=2 |
    grep -o "\"$PREFIX\":[^ ,]\+" |
    awk -F ':' '{printf "ssh://"; for (i=2; i<NF; i++) printf $i "/"; print $NF}' |
    xargs -L1 git clone
  1. 谁能帮我解决这个问题?有没有更好的办法?
  2. 如果你看到这个命令:grep -o "\"$PREFIX\":[^ ,]\+" | awk -F ':' '{printf "ssh://"; for (i=2; i&lt;NF; i++) printf $i "/"; print $NF}'

它会列出“vrath.gitlabtest.com”中的所有项目,但我可以在这里添加一些文件管理器吗?它将仅列出“vrath.gitlabtest/app1”或“vrath.gitlabtest/app2”的项目

【问题讨论】:

    标签: bash gitlab git-bash


    【解决方案1】:

    使用 json 感知工具解析 json:

    curl --header "PRIVATE-TOKEN: $TOKEN" http://vrath.gitlabtest.com/api/v4/projects?membership=true&per_page=100 | 
    jq -r '.[].ssh_url_to_repo' | xargs -L1 git clone
    

    gitlab 返回的 'ssh_url_to_repo' json 字段只包含所说的内容。

    请注意,我认为,如果没有membership=true,您将列出您的 gitlab 实例上的所有存储库,而不仅仅是您所属的那些,所以我在上面添加了它。

    前段时间我写了一个脚本,从 github、gitlab 和 aur.archlinux 备份我所有的 git repos。您可以查看here

    【讨论】:

    • 感谢@Kamil 的帮助。我尝试使用 jq。甚至运行了您上面提到的代码,但我收到错误“致命:您必须指定要克隆的存储库”。顺便说一句,我在 git-bash 上运行命令
    • 然后检查它。在没有xargs 的情况下运行,看看它会返回什么。运行xargs -t 看看会发生什么。在一个命令上运行 git clone 看看会发生什么。运行 curl 看看会发生什么。哪个命令会返回“致命”消息?
    猜你喜欢
    • 2022-01-26
    • 1970-01-01
    • 2021-09-09
    • 1970-01-01
    • 1970-01-01
    • 2020-09-06
    • 2013-04-22
    • 2016-11-12
    • 2021-02-20
    相关资源
    最近更新 更多