Теперь, когда v2 API, используемый в принятом ответе, больше не работает, пришло время для обновления, использующего Github API v3 .
Вы можете получить список репозиториев в формате JSON с помощью
curl -i https://api.github.com/users/username/repos
Остерегайтесь нумерации страниц! По умолчанию результаты разбиты на страницы до 30 элементов . Если у вас больше репозиториев, чем умещается на одной странице, вы получите заголовок ответа Link
HTTP со ссылками на другие страницы (с rel = next / last / first / prev). Вы также можете запросить больший размер страницы (до 100):
curl -i https://api.github.com/users/username/repos?per_page=100
Полный скрипт резервного копирования (при условии, что у вас есть 100 или меньше репозиториев) будет выглядеть примерно так:
#!/usr/bin/python
import os
import json
import urllib
import subprocess
username = 'username' # specify your github username
os.chdir(os.expanduser('~/github')) # location for your backups, must exist
url = 'https://api.github.com/users/%s/repos?per_page=100' % username
for repo in json.load(urllib.urlopen(url)):
print "+", repo['full_name']
if os.path.exists(repo['name']):
subprocess.call(['git', 'pull'], cwd=repo['name'])
else:
subprocess.call(['git', 'clone', repo['git_url']])