Skip to content

Instantly share code, notes, and snippets.

@samnang
Forked from davegallant/gh-clone-org
Created July 12, 2022 02:42
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save samnang/8eb724623c0a697e033af6d263843812 to your computer and use it in GitHub Desktop.
Save samnang/8eb724623c0a697e033af6d263843812 to your computer and use it in GitHub Desktop.
#!/usr/bin/env bash
# This script clones all repos in a GitHub org
# It requires the GH CLI: https://cli.github.com
# It can be re-run to collect new repos and pull the latest changes
set -euo pipefail
USAGE="Usage: gh-clone-org <user|org>"
[[ $# -eq 0 ]] && echo >&2 "missing arguments: ${USAGE}" && exit 1
org=$1
limit=9999
repos="$(gh repo list "$org" -L $limit)"
repo_total="$(echo "$repos" | wc -l)"
repos_complete=0
echo
echo "$repos" | while read -r repo; do
repo_name="$(echo "$repo" | cut -f1)"
echo -ne "\r\e[0K[ $repos_complete / $repo_total ] Cloning $repo_name"
gh repo clone "$repo_name" "$repo_name" -- -q 2>/dev/null || (
cd "$repo_name"
git pull -q
)
repos_complete=$((repos_complete + 1))
done
echo "Finished cloning all repos in $org."
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment