首页 > 解决方案 > 使用 bash 命令一次下载所有 gitlab 项目

问题描述

我的 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<NF; i++) printf $i "/"; print $NF}'

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

标签: bashgitlabgit-bash

解决方案


使用 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。你可以在这里查看


推荐阅读