You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
I did shallow clone to get around huge repos with years of history. Not saying this is great code, but sharing it in case someone else finds it useful.
#!/usr/bin/env bashset -e
RESET_COLOR="\\033[0m"
RED_COLOR="\\033[0;31m"
GREEN_COLOR="\\033[0;32m"
BLUE_COLOR="\\033[0;34m"
username=""
token=""functionreset_color() {
echo -e "${RESET_COLOR}\\c"
}
functionred_color() {
echo -e "${RED_COLOR}\\c"
}
functiongreen_color() {
echo -e "${GREEN_COLOR}\\c"
}
functionblue_color() {
echo -e "${BLUE_COLOR}\\c"
}
functionhello() {
blue_color
echo""echo" Backup My GitHub "echo""echo""echo"This script will clone all your repositories from provided username to your machine"echo"It will prompt you for your username account and personal access token"echo"To generate token, please, refer this guide - https://help.github.com/articles/creating-a-personal-access-token-for-the-command-line"echo"Make sure, that your token has full access to repo scope!"
reset_color
}
functioncheckForCurl() {
if! [ "$(command -v curl)" ];then
red_color
echo"You don't have installed curl"exit 1
else
green_color
echo"curl is present on your machine, continue..."fi
reset_color
}
functioncheckForJQ() {
if! [ "$(command -v jq)" ];then
red_color
echo"You don't have installed jq"exit 1
else
green_color
echo"jq is present on your machine, continue..."fi
reset_color
}
functioncloneRepositories() {
echo
blue_color
mkdir -p my
pushd my
repository_count=$(curl -XGET -s https://"${username}":"${token}"@api.github.com/users/"${username}"| jq -c --raw-output ".public_repos")
repositories=$(curl -XGET -s https://"${username}":"${token}"@api.github.com/users/"${username}"/repos?per_page="${repository_count}"| jq -c --raw-output ".[].clone_url")
green_color
echo"Cloning ${repository_count} repositories"
blue_color
forrepositoryin${repositories};doecho"Cloning ${repository}..."
git clone "${repository}"donepopd
green_color
echo"All your repositories are successfully cloned in ./my directory"
}
functioncloneStars() {
echo
blue_color
mkdir -p stars
pushd stars
repository_pages=$(curl -XGET -s https://"${username}":"${token}"@api.github.com/user/starred?per_page=100 -D - -o /dev/null | sed -nEe 's/^Link.+page=([[:digit:]]+)>; rel="last"/\1/p'| tr -d '[:space:]')
green_color
echo"Cloning ${repository_pages} pages of 100 repositories"
blue_color
bad=0
count=1
forpagein`seq 1 $repository_pages`;doecho"Getting page ${page}..."
repo_pairs=$(curl -XGET -s https://"${username}":"${token}"@api.github.com/user/starred?per_page=100\&page="${page}"| jq -c --raw-output ".[]|{url:.clone_url,name:.full_name}")forrepoin${repo_pairs};do# curl -L -s -o ${repository}.tar.gz https://github.com/${GITHUB_USERNAME}/${repository}/archive/master.tar.gz
url=$(echo $repo| jq -c --raw-output ".url")
name=$(echo $repo| jq -c --raw-output ".name")echo$repoecho https://github.com/${name}/archive/master.tar.gz
echo"$count. Cloning ${name} from ${url}..."
mkdir -p $(dirname $name)echo git clone "${url}""${name}" --depth 100
git clone "${url}""${name}" --depth 100 || (let bad+=1; continue)
let count+=1
donedonepopd
green_color
echo"${count} starred repositories are successfully cloned in ./stars directory"echo"${bad} repositories had errors"
}
hello
checkForCurl
checkForJQ
# Todo: use env vars for github login/token
cloneRepositories
cloneStars
The text was updated successfully, but these errors were encountered:
This is based on the code that RomaniukVadim tweaked (uncredited from this repo). The benefits are
I did shallow clone to get around huge repos with years of history. Not saying this is great code, but sharing it in case someone else finds it useful.
The text was updated successfully, but these errors were encountered: