Ich habe ein GitHub-Firmenkonto und möchte alle darin enthaltenen Repositorys sichern, um alles Neue zu berücksichtigen, das möglicherweise zu Automatisierungszwecken erstellt wird. Ich hatte so etwas gehofft:
git clone [email protected]:company/*.git
oder ähnliches würde funktionieren, aber es scheint den Platzhalter dort nicht zu mögen.
Gibt es in Git eine Möglichkeit, alles zu klonen und dann abzurufen, vorausgesetzt, man verfügt über die entsprechenden Berechtigungen?
Antworten:
Ich denke nicht, dass es so möglich ist. Am besten suchen und durchsuchen Sie eine Liste der Repositorys einer Organisation mithilfe der API.
Versuche dies:
http://${GITHUB_BASE_URL}/api/v3/orgs/${ORG_NAME}/repos?access_token=${ACCESS_TOKEN}
ssh_url
Immobilie suchen .git clone
jeder dieserssh_url
s.Es ist ein bisschen zusätzliche Arbeit, aber für GitHub ist eine ordnungsgemäße Authentifizierung erforderlich.
quelle
curl -i https://github.com/api/v3/orgs/company/repos?access_token=<token>
https://github.com/api/v3/
Versuchen Sie es stattdessenhttps://api.github.com/
./users/${COMPANY}/repos
stattdessen den Pfad verwenden/orgs/${COMPANY}/repos
.access_token
Abfrageparameters veraltet ist. Wenn dieses Token von einer App verwendet wird, über die Sie keine Kontrolle haben, beachten Sie, dass es aufgrund dieser Ablehnung möglicherweise nicht mehr funktioniert.Ersetzen Sie unter Windows und allen UNIX / LINUX- Systemen mit Git Bash oder einem anderen Terminal
YOURUSERNAME
durch Ihren Benutzernamen und verwenden Sie:CNTX=users
und einNAME=yourusername
, um alle Ihre Repositorys herunterzuladen.CNTX=orgs
und festNAME=yourorgname
, um alle Repositorys Ihrer Organisation herunterzuladen.Die maximale Seitengröße beträgt 100, daher müssen Sie diese mehrmals mit der richtigen Seitenzahl aufrufen, um alle Ihre Repositorys abzurufen (
PAGE
auf die gewünschte Seitenzahl eingestellt , die Sie herunterladen möchten).Hier ist ein Shell-Skript, das die oben genannten Aufgaben ausführt : https://gist.github.com/erdincay/4f1d2e092c50e78ae1ffa39d13fa404e
quelle
Organisations-Repositorys
Versuchen Sie den folgenden Shell-Einzeiler, um alle Repos aus Ihrer Organisation zu klonen:
Benutzer-Repositorys
Klonen aller mit Git-Repository-URLs:
Klonen aller mit Klon-URL:
Hier ist die nützliche Shell-Funktion, die den Startdateien des Benutzers hinzugefügt werden kann (mit
curl
+jq
):Private Repositories
Wenn Sie die privaten Repos klonen müssen, können Sie ein Autorisierungstoken wie folgt in Ihren Header einfügen:
oder übergeben Sie es in param (
?access_token=TOKEN
), zum Beispiel:Anmerkungen:
type=private
Ihrer Abfragezeichenfolge hinzu, um nur private Repositorys abzurufen .hub
nach der Konfiguration Ihres API-Schlüssels.Siehe auch:
Hinweise :
- Um die Geschwindigkeit zu erhöhen, stellen Sie die Anzahl der parallelen Prozesse ein, indem Sie den
-P
Parameter fürxargs
(-P4
= 4 Prozesse) angeben.- Wenn Sie die GitHub-Grenzwerte erhöhen müssen, versuchen Sie, sich durch Angabe Ihres API-Schlüssels zu authentifizieren.
- Hinzufügen
--recursive
, um in die registrierten Submodule zurückzukehren, und Aktualisieren aller darin verschachtelten Submodule.quelle
Dieser Kern erledigt die Aufgabe in einer Zeile in der Befehlszeile:
Ersetzen
[your_org]
Sie durch den Namen Ihrer Organisation. Und stellen Sie Ihreper_page
bei Bedarf ein.AKTUALISIEREN:
Wie von ATutorMe erwähnt, beträgt die maximale Seitengröße laut GitHub-Dokumenten 100 .
Wenn Sie mehr als 100 Repos haben, müssen Sie
page
Ihrer URL einen Parameter hinzufügen und können den Befehl für jede Seite ausführen.Hinweis: Der Standardparameter
per_page
ist30
.quelle
Gehen Sie zu Kontoeinstellungen -> Anwendung und erstellen Sie einen API-Schlüssel.
Geben Sie dann den API-Schlüssel, die URL der Github-Instanz und den Organisationsnamen in das folgende Skript ein
Speichern Sie das in einer Datei,
chmod u+x
der Datei, und führen Sie sie dann aus.Vielen Dank an Arnaud für den Ruby-Code.
quelle
Also werde ich auch meine Antwort hinzufügen. :) (Ich fand es einfach)
Liste abrufen (ich habe die Firma "Magento" verwendet):
Verwenden Sie
clone_url
stattdessenssh_url
, um den HTTP-Zugriff zu verwenden.Also, lasst uns sie alle klonen! :) :)
Wenn Sie private Repos abrufen möchten, fügen Sie einfach den Parameter GET hinzu
?access_token=YOURTOKEN
quelle
Ich fand einen Kommentar in der Liste @seancdavis als sehr hilfreich, insbesondere weil ich wie das Originalposter alle Repos für einen schnellen Zugriff synchronisieren wollte, von denen jedoch die überwiegende Mehrheit privat war.
Ersetzen Sie [[USERNAME]] durch Ihren Github-Benutzernamen und [[ORGANISATION]] durch Ihre Github-Organisation. Die Ausgabe (JSON-Repo-Metadaten) wird an ein einfaches Ruby-Skript übergeben:
quelle
.../orgs/[[organization]]/repos...
zu.../users/[[username]]/repos...
. Jetzt kann ich alle meine Arbeiten schnell auf verschiedene lokale Computer importieren. VIELEN DANK!Ich habe ein Skript mit Python3 und Github APIv3 erstellt
https://github.com/muhasturk/gitim
Renn einfach
quelle
Dieser Python-Einzeiler macht das, was Sie brauchen. Es:
macht für jeden einen Systemaufruf an
git clone
quelle
quelle
?page=2
.Einfache Lösung:
quelle
Um es zu verwenden (vorausgesetzt, Sie haben nodejs installiert)
Dies würde eine Liste aller Repos von erhalten
wires
und Informationen in dastest
Verzeichnis schreiben , wobei die Autorisierungsdetails (Benutzer / Pass) verwendet werden, die Sie auf der CLI angeben.Im Detail ist es
Die Repos werden nicht geklont, sondern es wird eine
.txt
Datei geschrieben, inxargs
die Sie zum Klonen übergehen können , zum Beispiel:Vielleicht ist das nützlich für Sie; Es sind nur ein paar Zeilen JS, daher sollte es einfach sein, sie an Ihre Bedürfnisse anzupassen
quelle
Dazu gibt es auch ein sehr nützliches npm-Modul . Es kann nicht nur klonen, sondern auch ziehen (um bereits vorhandene Daten zu aktualisieren).
Sie erstellen einfach eine Konfiguration wie folgt:
und
gitall clone
zum Beispiel tun . Odergitall pull
quelle
Für den Fall, dass jemand nach einer Windows-Lösung sucht, gibt es hier eine kleine Funktion in PowerShell, um den Trick auszuführen (könnte Oneliner / Alias sein, wenn nicht die Tatsache, dass ich sie brauche, um sowohl mit als auch ohne Proxy zu arbeiten).
quelle
Wenn Sie also in der Praxis alle
FOO
passenden Repos aus der Organisation klonen möchtenBAR
, können Sie den folgenden Einzeiler verwenden , für den jq und allgemeine Cli-Dienstprogramme erforderlich sindquelle
Ein weiteres Shell-Skript mit Kommentaren, die alle Repositorys (öffentlich und privat) eines Benutzers klonen:
quelle
Erstellen Sie einen Bash-Alias / eine Bash-Funktion in Ihrem
~/.bashrc file
Ich habe dies für mein Team gelöst, indem ich in meinem einen Alias / Bash-Funk erstellt habe
~/.bashrc file
Schritte
Öffnen Sie ein Terminal oder eine Linux-Shell und öffnen Sie Folgendes
~/.bashrc file
:füge diese Funktion hinzu:
Speichern und schließen Sie Ihre ~ / .bashrc-Datei und schließen Sie dann das Terminal. Sie müssen dies tun, oder die neue Funktion wird nicht initialisiert:
neues Terminal öffnen und ausprobieren:
Beispiel : Wenn Ihre persönliche Github-Repo-URL https://github.com/awesome-async heißt, lautet der Befehl
Wichtig
Das
per_page=200
am Ende der ersten Variablen festgelegteORG_URL
Anzahl der Repos, die geklont werden sollen. Achten Sie daher besonders darauf:Hoffe das hilft! :) :)
quelle
...repos?page=${2}&per_page=100";
Sie können eine Liste der Repositorys
curl
abrufen, indem Sie diese Liste verwenden und dann mit einer Bash-Schleife durchlaufen:quelle
Sie können das Open-Source-Tool verwenden, um eine Reihe von Github-Repositorys zu klonen: https://github.com/artiomn/git_cloner
Beispiel:
git_cloner --type github --owner octocat --login user --password user https://my_bitbucket
Verwenden Sie die JSON-API von
api.github.com
. Sie können das Codebeispiel in der Github-Dokumentation sehen: https://developer.github.com/v3/Oder dort:
https://github.com/artiomn/git_cloner/blob/master/src/git_cloner/github.py
quelle
So klonen Sie nur private Repos mit einem Zugriffsschlüssel und Python 3 und dem installierten Anforderungsmodul:
quelle
Eine Python3-Lösung, die eine umfassende Paginierung über den
Link
Header enthält.Voraussetzungen:
pip3 install links-from-link-header
Dann können Sie verwenden
xargs
oder parallel und:cat repolist | parallel -I% hub clone %
quelle
Wenn Sie eine Liste von Repositorys in einer Liste wie dieser haben, funktioniert dieses Shell-Skript:
quelle
Ich habe ein Beispiel-Batch-Skript erstellt. Sie können alle privaten / öffentlichen Repositories von github.com herunterladen. Nachdem ein Repository heruntergeladen wurde, wird es automatisch in eine Zip-Datei konvertiert.
Hinweis: Die Datei files.txt sollte nur Repository-Namen enthalten wie:
quelle
Update vom 19. Mai
Verwenden Sie diesen Bash-Befehl für eine Organisation (privates Repo enthalten).
quelle
Die hier vorherrschenden Antworten berücksichtigen nicht, dass die Github-API trotz der Angaben in nur maximal 100 Repositorys zurückgibt
per_page
. Wenn Sie eine Github-Organisation mit mehr als 100 Repositorys klonen, müssen Sie den Paging-Links in der API-Antwort folgen.Ich habe ein CLI-Tool geschrieben, um genau das zu tun :
Dadurch werden alle Repositorys in der
myorg
Organisation in das aktuelle Arbeitsverzeichnis geklont.quelle
Für Organisationen, auf die Sie mit privaten Repos zugreifen können:
Es wird das verwendet
html_url
, sodass Sie nichtaccess_token
einfach Ihr Github-Passwort eingeben müssen, wenn Sie dazu aufgefordert werden.quelle
Klonen Sie alle Ihre Repos, die keine Gabeln sind:
Klonen Sie Ihre Kernpunkte:
Dieser
jq
Befehl ist komplex, da der Name des Repos von Gists Hashes sind, sodass der Befehl alle Dateinamen mit dem Namen des Repos verknüpftSie können den JSON beliebig mit filtern
jq
Installieren:
sudo apt-get install jq
Im obigen Beispiel habe ich Gabeln folgendermaßen herausgefiltert :
curl ... | jq -r 'map(select(.fork == false))' ...
- nützlich, um keine Repos zu klonen, bei denen Sie gelegentliche Pull-Anfragen gestellt habenjq unterstützt einige sehr erweiterte Funktionen.
man jq
ist dein FreundSie können sich bei authentifizieren,
curl -u "username" ...
um auf private Repos zuzugreifenGuthubs API-URLs
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
Github API Docs für Repos
quelle
quelle
Um alle Ihre eigenen privaten und öffentlichen Repos zu klonen, generieren Sie einfach ein neues Zugriffstoken mit Repos-Zugriff und verwenden Sie Folgendes:
(durch Ihr eigenes Zugriffstoken und Ihren eigenen Benutzernamen ersetzen)
Dadurch werden alle Repos im aktuellen Ordner geklont
Dies ist ein kleines Bash-Programm. Sie können es einfach in das Terminal einfügen und die Eingabetaste drücken
quelle