{"id":13889,"url":"\/distributions\/13889\/click?bit=1&hash=1ca9d3af68367c3851a48783eb73a779f640773356888dee19fed6204e72a9d7","title":"\u00ab\u0410\u0432\u0438\u0442\u043e\u00bb \u0437\u0430\u043f\u0443\u0441\u0442\u0438\u043b \u0440\u0430\u0441\u0441\u044b\u043b\u043a\u0443 \u0441\u043a\u0438\u0434\u043e\u043a \u043d\u0430 \u043d\u0435\u0434\u0432\u0438\u0436\u0438\u043c\u043e\u0441\u0442\u044c","buttonText":"","imageUuid":"","isPaidAndBannersEnabled":false}

GitLab: склонировать список репозиториев

Решил слегка “причесать” и обобщить свой опыт по этому вопросу. Чтобы удобней было пользоваться, как этакой краткой инструкцией, а не искать разрозненные ответы на SO и т.п.

Задача проста – сделать удобно :)

  • Взять GitLab (много где используется, как self-hosted) и выкачать с него все репозитории проекта. Чтобы можно было локально работать с ними, не загружая каждый отдельно.
  • Обновлять эти репозитории одной командой

Загрузка списка репозиториев с GitLab

Тут всё несложно – надо получить сам список и по нему всё скачать. Удобнее это делать с использованием ssh ключа (добавляется в GitLab через веб-интерфейс). Но можно и git credentials включить. Сам список достаточно просто в браузере открыть и сохранить projects.json (название по умолчанию).

  • Список репозиториев: https://your-gitlab-host/api/v4/projects?per_page=1000
  • Или список для группы проектов: https://your-gitlab-host/api/v4/groups/{group-id}/projects?per_page=1000

group-id можно тоже через веб-интерфейс посмотреть, примерно так:

GitLab project group ID
  • Выкачать (в текущий каталог) репозитории по списку из файла: jq -r '.[].ssh_url_to_repo' < /path/to/projects.json | xargs -n1 git clone. Можно аналоги утилиты jq использовать, мне она привычней.
  • Если авторизация по ssh-ключу не настроена – придется из json вместо поля ssh_url_to_repo извлекать поле http_url_to_repo. Можно хранить логин/пароль для GitLab в ~/.git-credentials (там они лежат в открытом виде!).

Первая часть на этом закончена. На очереди – обновление репозиториев.

Обновление списка репозиториев

Здесь всё ещё проще – достаточно одной команды. Перейти в каталог со склонированными репозиториями и выполнить:

find . -type d -name '.git' \ | xargs -n1 -- sh -c \ 'cd "${0}/.." && echo \ && basename -sa $(git rev-parse --show-toplevel) \ && git pull --all'

Найдёт все каталоги с директорией .git внутри (а это и есть репозитории) и обновит их через git pull --all. Соответственно, каталоги, не являющиеся репозиториями, будут проигнорированы. Готово!

0
Комментарии
Читать все 0 комментариев
null