Référentiels d'organisation
Pour cloner tous les dépôts de votre organisation, essayez le shell one-liner suivant:
GHORG=company; curl "https://api.github.com/orgs/$GHORG/repos?per_page=1000" | grep -o 'git@[^"]*' | xargs -L1 git clone
Référentiels d'utilisateurs
Cloner tout à l'aide des URL de référentiel Git:
GHUSER=CHANGEME; curl "https://api.github.com/users/$GHUSER/repos?per_page=1000" | grep -o 'git@[^"]*' | xargs -L1 git clone
Cloner tout en utilisant l'URL de clonage:
GHUSER=CHANGEME; curl "https://api.github.com/users/$GHUSER/repos?per_page=1000" | grep -w clone_url | grep -o '[^"]\+://.\+.git' | xargs -L1 git clone
Voici la fonction shell utile qui peut être ajoutée aux fichiers de démarrage de l'utilisateur (en utilisant 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
}
Dépôts privés
Si vous avez besoin de cloner les dépôts privés, vous pouvez ajouter un jeton d'autorisation dans votre en-tête comme:
-H 'Authorization: token <token>'
ou passez-le dans le param ( ?access_token=TOKEN
), par exemple:
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
Remarques:
- Pour récupérer uniquement les référentiels privés, ajoutez-les
type=private
à votre chaîne de requête.
- Une autre façon consiste à utiliser
hub
après avoir configuré votre clé API.
Voir également:
Conseils :
- Pour augmenter la vitesse, définissez le nombre de processus parallèles en spécifiant le -P
paramètre pour xargs
( -P4
= 4 processus).
- Si vous devez augmenter les limites de GitHub, essayez de vous authentifier en spécifiant votre clé API.
- Ajouter --recursive
pour récurer dans les sous-modules enregistrés et mettre à jour tous les sous-modules imbriqués à l'intérieur.