Репозитории организации
Чтобы клонировать все репозитории вашей организации, попробуйте следующую однострочную оболочку:
GHORG=company; curl "https://api.github.com/orgs/$GHORG/repos?per_page=1000" | grep -o 'git@[^"]*' | xargs -L1 git clone
Репозитории пользователей
Клонирование всего с использованием URL-адресов репозитория Git:
GHUSER=CHANGEME; curl "https://api.github.com/users/$GHUSER/repos?per_page=1000" | grep -o 'git@[^"]*' | xargs -L1 git clone
Клонирование всего с помощью Clone URL:
GHUSER=CHANGEME; curl "https://api.github.com/users/$GHUSER/repos?per_page=1000" | grep -w clone_url | grep -o '[^"]\+://.\+.git' | xargs -L1 git clone
Вот полезная функция оболочки, которую можно добавить в файлы запуска пользователя (используя curl
+ jq
):
# Usage: gh-clone-user (user)
gh-clone-user() {
curl -sL "https://api.github.com/users/$1/repos?per_page=1000" | jq -r '.[]|.clone_url' | xargs -L1 git clone
}
Частные репозитории
Если вам нужно клонировать частные репозитории, вы можете добавить токен авторизации в свой заголовок, например:
-H 'Authorization: token <token>'
или передайте его в param ( ?access_token=TOKEN
), например:
curl -s "https://api.github.com/users/$GHUSER/repos?access_token=$GITHUB_API_TOKEN&per_page=1000" | grep -w clone_url | grep -o '[^"]\+://.\+.git' | xargs -L1 git clone
Ноты:
- Чтобы получить только частные репозитории, добавьте
type=private
в строку запроса.
- Другой способ - использовать
hub
после настройки ключа API.
Смотрите также:
Подсказки :
- Для увеличения скорости установите количество параллельных процессов, указав -P
параметр для xargs
( -P4
= 4 процесса).
- Если вам нужно поднять ограничения GitHub, попробуйте выполнить аутентификацию, указав свой ключ API.
- Добавить --recursive
рекурсию в зарегистрированные подмодули и обновить все вложенные подмодули внутри.