J'ai un compte GitHub d'entreprise et je souhaite sauvegarder tous les référentiels qu'il contient, en tenant compte de tout ce qui pourrait être créé à des fins d'automatisation. J'espérais quelque chose comme ça:
git clone [email protected]:company/*.git
ou similaire fonctionnerait, mais il ne semble pas aimer le caractère générique.
Existe-t-il un moyen dans Git de cloner puis de tout extraire en supposant que l'on dispose des autorisations appropriées?
Réponses:
Je ne pense pas qu'il soit possible de le faire de cette façon. Votre meilleur pari est de trouver et de parcourir une liste des référentiels d'une organisation à l'aide de l'API.
Essaye ça:
http://${GITHUB_BASE_URL}/api/v3/orgs/${ORG_NAME}/repos?access_token=${ACCESS_TOKEN}
ssh_url
propriété.git clone
chacun de cesssh_url
art.C'est un peu de travail supplémentaire, mais il est nécessaire que GitHub ait une authentification appropriée.
la source
curl -i https://github.com/api/v3/orgs/company/repos?access_token=<token>
https://github.com/api/v3/
, essayezhttps://api.github.com/
./users/${COMPANY}/repos
chemin au lieu de/orgs/${COMPANY}/repos
.access_token
paramètre de requête est obsolète. Si ce jeton est utilisé par une application sur laquelle vous n'avez pas de contrôle, sachez qu'il peut cesser de fonctionner en raison de cette dépréciation.Sous Windows et tous les systèmes UNIX / LINUX , en utilisant Git Bash ou tout autre terminal , remplacez-le
YOURUSERNAME
par votre nom d'utilisateur et utilisez:CNTX=users
etNAME=yourusername
, pour télécharger tous vos référentiels.CNTX=orgs
etNAME=yourorgname
, pour télécharger tous les référentiels de votre organisation.La taille de page maximale est de 100, vous devez donc l'appeler plusieurs fois avec le bon numéro de page pour obtenir tous vos référentiels (définis
PAGE
sur le numéro de page souhaité que vous souhaitez télécharger).Voici un script shell qui fait ce qui précède: https://gist.github.com/erdincay/4f1d2e092c50e78ae1ffa39d13fa404e
la source
Référentiels d'organisation
Pour cloner tous les dépôts de votre organisation, essayez le shell one-liner suivant:
Référentiels d'utilisateurs
Cloner tout à l'aide des URL de référentiel Git:
Cloner tout en utilisant l'URL de clonage:
Voici la fonction shell utile qui peut être ajoutée aux fichiers de démarrage de l'utilisateur (en utilisant
curl
+jq
):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:
ou passez-le dans le param (
?access_token=TOKEN
), par exemple:Remarques:
type=private
à votre chaîne de requête.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 pourxargs
(-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.la source
Cet élément essentiel accomplit la tâche en une seule ligne sur la ligne de commande:
Remplacez
[your_org]
par le nom de votre organisation. Et définissez votreper_page
si nécessaire.METTRE À JOUR:
Comme l'a mentionné ATutorMe, la taille maximale de la page est de 100, selon la documentation GitHub .
Si vous avez plus de 100 dépôts, vous devrez ajouter un
page
paramètre à votre URL et vous pourrez exécuter la commande pour chaque page.Remarque: le
per_page
paramètre par défaut est30
.la source
Allez dans Paramètres du compte -> Application et créez une clé API,
puis insérez la clé API, l'URL de l'instance github et le nom de l'organisation dans le script ci-dessous
Enregistrez-le dans un fichier,
chmod u+x
le fichier, puis exécutez-le.Merci à Arnaud pour le code ruby.
la source
Alors, j'ajouterai ma réponse aussi. :) (j'ai trouvé que c'est simple)
Récupérer la liste (j'ai utilisé la société "magento"):
Utilisez à la
clone_url
placessh_url
pour utiliser l'accès HTTP.Alors, clonons-les tous! :)
Si vous allez récupérer des dépôts privés, ajoutez simplement le paramètre GET
?access_token=YOURTOKEN
la source
J'ai trouvé un commentaire dans le gist @seancdavis fourni pour être très utile, surtout parce que, comme l'affiche originale, je voulais synchroniser tous les dépôts pour un accès rapide, mais la grande majorité d'entre eux étaient privés.
Remplacez [[USERNAME]] par votre nom d'utilisateur Github et [[ORGANIZATION]] par votre organisation Github. La sortie (métadonnées du référentiel JSON) sera transmise à un simple script ruby:
la source
.../orgs/[[organization]]/repos...
pour.../users/[[username]]/repos...
. Maintenant, je peux rapidement importer tout mon travail sur différentes machines locales. MERCI!J'ai fait un script avec Python3 et Github APIv3
https://github.com/muhasturk/gitim
Courez juste
la source
Ce one-liner en python fera ce dont vous avez besoin. Il:
pour chacun, effectue un appel système à
git clone
la source
la source
?page=2
.Solution simple:
la source
Pour l'utiliser (en supposant que vous ayez installé nodejs)
Cela obtiendrait une liste de tous les dépôts à partir de
wires
et écrirait des informations dans letest
répertoire, en utilisant les détails d'autorisation (utilisateur / pass) que vous fournissez sur la CLI.En détail, il
Il ne clone pas réellement les dépôts, mais écrit plutôt un
.txt
fichier dans lequel vous pouvez passerxargs
pour faire le clonage, par exemple:Peut-être que cela vous est utile; il ne s'agit que de quelques lignes de JS, il devrait donc être facile de s'adapter à vos besoins
la source
Il existe également un module npm très utile pour ce faire. Il peut non seulement cloner, mais également extraire (pour mettre à jour les données que vous avez déjà).
Vous créez simplement une configuration comme celle-ci:
et faites
gitall clone
par exemple. Ougitall pull
la source
Au cas où quelqu'un chercherait une solution Windows, voici une petite fonction dans PowerShell pour faire l'affaire (pourrait être oneliner / alias sinon le fait que j'en ai besoin pour fonctionner avec et sans proxy).
la source
Donc, en pratique, si vous souhaitez cloner tous les dépôts de l'organisation
FOO
qui correspondentBAR
, vous pouvez utiliser le one-liner ci-dessous, qui nécessite jq et les utilitaires cli communsla source
Un autre script shell avec des commentaires qui clone tous les référentiels (publics et privés) d'un utilisateur:
la source
Créez un alias / func bash dans votre
~/.bashrc file
J'ai résolu ce problème pour mon équipe en créant une fonction alias / bash dans mon
~/.bashrc file
pas
ouvrez un terminal ou un shell Linux et ouvrez votre
~/.bashrc file
:ajoutez cette fonction:
enregistrez et fermez votre fichier ~ / .bashrc puis fermez le terminal - vous devez faire ceci ou la nouvelle fonction ne s'initialise pas:
ouvrez un nouveau terminal et essayez-le:
exemple : si votre URL de dépôt github personnelle s'appelle https://github.com/awesome-async, la commande serait
Important
le
per_page=200
à la fin de la première variableORG_URL
définit le nombre de dépôts qui seront clonés, alors faites particulièrement attention à cela:J'espère que cela t'aides! :)
la source
...repos?page=${2}&per_page=100";
Vous pouvez obtenir une liste des référentiels en utilisant
curl
, puis itérer sur ladite liste avec une boucle bash:la source
Vous pouvez utiliser un outil open source pour cloner un tas de référentiels github: https://github.com/artiomn/git_cloner
Exemple:
git_cloner --type github --owner octocat --login user --password user https://my_bitbucket
Utilisez l'API JSON de
api.github.com
. Vous pouvez voir l'exemple de code dans la documentation de github: https://developer.github.com/v3/Ou là:
https://github.com/artiomn/git_cloner/blob/master/src/git_cloner/github.py
la source
Pour cloner uniquement les dépôts privés, avec une clé d'accès, et avec python 3 et le module de requêtes installé:
la source
Une solution Python3 qui inclut une pagination exhaustive via
Link
Header.Conditions préalables:
pip3 install links-from-link-header
Ensuite, vous pouvez utiliser
xargs
ou parallèle et:cat repolist | parallel -I% hub clone %
la source
Si vous avez une liste de référentiels dans une liste comme celle-ci, alors ce script shell fonctionne:
la source
J'ai créé un exemple de script batch. Vous pouvez télécharger tous les référentiels privés / publics depuis github.com. Une fois le référentiel téléchargé, il est automatiquement converti en fichier zip.
Remarque: le fichier files.txt ne doit contenir que des noms de référentiel tels que:
la source
Mise à jour du 19 mai
utiliser cette commande bash pour une organisation (dépôt privé inclus)
la source
Les réponses prédominantes ici ne tiennent pas compte du fait que l'API Github ne renverra qu'un maximum de 100 référentiels malgré ce que vous pouvez spécifier dans
per_page
. Si vous clonez une organisation Github avec plus de 100 référentiels, vous devrez suivre les liens de pagination dans la réponse de l'API.J'ai écrit un outil CLI pour faire exactement cela :
Cela clonera tous les référentiels de l'
myorg
organisation dans le répertoire de travail actuel.la source
Pour les organisations auxquelles vous avez accès avec des dépôts privés:
Il utilise le
html_url
, donc vous n'avez pas besoin d'access_token
entrer simplement votre mot de passe github lorsque vous y êtes invité.la source
Clonez tous vos dépôts qui ne sont pas des fourchettes:
Clonez vos informations essentielles:
Cette
jq
commande est complexe car le nom du dépôt de gists est un hachage, de sorte que la commande concatène tous les noms de fichiers pour être le nom du dépôtVous pouvez filtrer le JSON arbitrairement en utilisant
jq
installer:
sudo apt-get install jq
Dans l'exemple ci-dessus, j'ai filtré les fourchettes en utilisant ceci:
curl ... | jq -r 'map(select(.fork == false))' ...
- utile pour ne pas cloner des dépôts où vous avez fait des demandes d'extraction occasionnellesjq prend en charge certaines fonctionnalités très avancées.
man jq
est votre amiVous pouvez vous authentifier avec
curl -u "username" ...
pour accéder aux dépôts privésURL d'API de Guthub
https://api.github.com/user/repos\?page\=1\&per_page\=100
https://api.github.com/users/other_username/repos\?page\=1\&per_page\=100
https://api.github.com/orgs/orgname/repos\?page\=1\&per_page\=100
Documents de l'API Github pour les dépôts
la source
la source
Pour cloner tous vos propres dépôts privés et publics, générez simplement un nouveau jeton d'accès avec un accès aux dépôts et utilisez ceci:
(remplacez-le par votre propre jeton d'accès et nom d'utilisateur)
Cela clonera tous les dépôts dans le dossier actuel
Ceci est un petit programme bash, vous pouvez simplement le coller dans le terminal et appuyer sur Entrée
la source