#!/bin/bash # github mirror script # @author Michael Klier login=USERNAME token=APITOKEN backup_dir=BACKUPDIR api_url=http://github.com/api/v2/xml # the API returns only 30 repos per page, let's check the first 10 pages repos='' for i in `seq 1 10` do rep="$(wget --quiet --post-data="login=${login}&token=${token}" -O - ${api_url}/repos/show/${login}?page=$i | xmlstarlet sel -T -t -m '//repository' -v name -o ' ')" repos="$repos $rep" done [[ ! -d ${backup_dir} ]] && mkdir -p ${backup_dir} cd ${backup_dir} for repo in $repos; do branches="$(wget --quiet --post-data="login=${login}&token=${token}" -O - ${api_url}/repos/show/${login}/${repo}/branches | xmlstarlet sel -T -t -m '//branches/*' -v 'name()' -o ' ')" if [ ! -d ${repo} ]; then git clone -o github git@github.com:${login}/${repo}.git ${repo} fi cd ${repo} for branch in $branches; do git branch --track ${branch} github/${branch} 2>/dev/null git checkout ${branch} git pull github ${branch} done cd ${backup_dir} done # vim:ts=4:sw=4:et:enc=utf-8: