Repositórios de organização
Para clonar todos os repos de sua organização, tente o seguinte shell one-liner:
GHORG=company; curl "https://api.github.com/orgs/$GHORG/repos?per_page=1000" | grep -o 'git@[^"]*' | xargs -L1 git clone
Repositórios de usuário
Clonando tudo usando URLs de repositório Git:
GHUSER=CHANGEME; curl "https://api.github.com/users/$GHUSER/repos?per_page=1000" | grep -o 'git@[^"]*' | xargs -L1 git clone
Clonando tudo usando Clone URL:
GHUSER=CHANGEME; curl "https://api.github.com/users/$GHUSER/repos?per_page=1000" | grep -w clone_url | grep -o '[^"]\+://.\+.git' | xargs -L1 git clone
Aqui está a função shell útil que pode ser adicionada aos arquivos de inicialização do usuário (usando 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
}
Repositórios privados
Se precisar clonar os repositórios privados, você pode adicionar token de autorização em seu cabeçalho, como:
-H 'Authorization: token <token>'
ou passe-o no parâmetro ( ?access_token=TOKEN
), por exemplo:
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
Notas:
- Para buscar apenas repositórios privados, adicione
type=private
em sua string de consulta.
- Outra maneira é usar
hub
depois de configurar sua chave API.
Veja também:
Dicas :
- Para aumentar a velocidade, defina o número de processos paralelos especificando o -P
parâmetro para xargs
( -P4
= 4 processos).
- Se você precisar aumentar os limites do GitHub, tente autenticar especificando sua chave de API.
- Adicionar --recursive
para recursar nos submódulos registrados e atualizar quaisquer submódulos aninhados dentro deles.