Решил слегка “причесать” и обобщить свой опыт по этому вопросу. Чтобы удобней было пользоваться, как этакой краткой инструкцией, а не искать разрозненные ответы на 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=1000group-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. Соответственно, каталоги, не являющиеся репозиториями, будут проигнорированы. Готово!Оригинал.#git #gitlab