Wie kann ich nur einen bestimmten Ordner oder ein bestimmtes Verzeichnis von einem auf GitHub gehosteten Remote-Git-Repo herunterladen?
Angenommen, das Beispiel GitHub Repo lebt hier:
[email protected]:foobar/Test.git
Seine Verzeichnisstruktur:
Test/
├── foo/
│ ├── a.py
│ └── b.py
└── bar/
├── c.py
└── d.py
Ich möchte nur den Ordner foo herunterladen und nicht das gesamte Testprojekt klonen.
Antworten:
Update Sep. 2016: Es gibt einige Tools, die von der Community erstellt wurden und dies für Sie tun können:
Git unterstützt dies nicht, Github jedoch über SVN. Wenn Sie Ihren Code mit Subversion auschecken, konvertiert Github das Repo im Backend im Wesentlichen von Git in Subversion und stellt dann das angeforderte Verzeichnis bereit.
Hier erfahren Sie, wie Sie mit dieser Funktion einen bestimmten Ordner herunterladen können. Ich werde die beliebte Javascript-Bibliothek
lodash
als Beispiel verwenden.Navigieren Sie zu dem Ordner, den Sie herunterladen möchten . Lassen Sie uns
/test
von dermaster
Niederlassung herunterladen .Ändern Sie die URL für die Subversion . Ersetzen
tree/master
durchtrunk
.https://github.com/lodash/lodash/tree/master/test
➜https://github.com/lodash/lodash/trunk/test
Laden Sie den Ordner herunter . Gehen Sie zur Befehlszeile und greifen Sie auf den Ordner mit SVN zu.
Möglicherweise sehen Sie keine Aktivität sofort, da Github bis zu 30 Sekunden benötigt, um größere Repositorys zu konvertieren. Seien Sie also geduldig.
Das ist alles! Github unterstützt auch weitere Subversion-Funktionen , einschließlich der Unterstützung für das Festschreiben und Übertragen von Änderungen.
quelle
tree/master
mittrunk
und Sie können den spezifischen Ordner erhalten.tree/master
mittrunk
. Diese Informationen sollten als Antwort hinzugefügt werden.svn export
, da ich keine Subversion-Arbeitskopie wollte. Dann habe ich den resultierenden Ordner in Git hinzugefügt. (Ich habe irgendwie ein großes Stück meines Verzeichnisbaums verloren, also habe ich aus dem Repo exportiert, das ich gegabelt habe.)branch
Weg geändertbranches
, was ich für richtig halte . Wenn nicht, ändern Sie es zurück.Zwei Optionen für diese Funktion:
Option 1: GitZip-Browsererweiterung
Verwendungszweck:
Bekomme Token:
Option 2: Github Gh-Seite
Schritt 1: Geben Sie die Github-URL in das Feld oben rechts ein.
Schritt 2: Drücken Sie die Eingabetaste oder klicken Sie auf Download, um die Zip-Datei direkt herunterzuladen, oder klicken Sie auf Suchen, um die Liste der Unterordner und Dateien anzuzeigen.
Schritt 3: Klicken Sie auf "Zip-Datei herunterladen" oder "Datei abrufen", um Dateien abzurufen.
In den meisten Fällen funktioniert es einwandfrei, außer dass der Ordner aufgrund der Einschränkung der Github Trees-API mehr als 1.000 Dateien enthält. (bezieht sich auf Github API # Inhalt )
Außerdem können private / öffentliche Repos unterstützt und das Ratenlimit aktualisiert werden, wenn Sie über ein GitHub-Konto verfügen und auf dieser Website den Link "Token abrufen" verwenden.
quelle
Gehen Sie zu DownGit > Geben Sie Ihre URL ein> Herunterladen!
Jetzt können Sie DIRECTLY DOWNLOAD oder DOWNLOAD LINK für jedes öffentliche GitHub-Verzeichnis oder jede öffentliche Datei ( besonders große Datei ) von DownGit erstellen ! Hier ist eine einfache Demonstration-
Sie können auch die heruntergeladene Datei Eigentums- konfigurieren detaillierte Nutzungs .
quelle
downloaded 25 of 25 files
wenn ich versuche, von dieser URL herunterzuladen: github.com/dssg/hitchhikers-guide/tree/master/curriculum/…Wenn Sie haben
svn
, könnensvn export
Sie dies tun:Beachten Sie das URL-Format:
https://github.com/
/trunk
am Ende angehängtBevor Sie ausführen
svn export
, sollten Sie zunächst den Inhalt des Verzeichnisses überprüfen mit:quelle
.git
Erweiterung beibehalten. Sie können den vollständigen Projektlink verwenden und zunächstsvn ls
den vollständigen Pfad des Projekts verwenden. Beispiel :svn ls https://github.com/RobTillaart/Arduino.git
. Um nur einen Ordner zu exportieren, fügen Sie einfach den/trunk
folgenden Pfad hinzu, wie zsvn export https://github.com/RobTillaart/Arduino.git/trunk/libraries/DHTlib
. Es ist einfacher, den Projektpfad intakt zu halten.https://github.com/miguelgrinberg/python-socketio/tree/master/examples/wsgi
, führen Sie ihn aussvn export https://github.com/miguelgrinberg/python-socketio.git/trunk/examples/wsgi
. Ein aufgerufenes Verzeichniswsgi
wird unter dem aktuellen Arbeitsverzeichnis erstellt. Nur Quelldateien, sonst nichts. Nein.git
, keine Subversion-bezogenen Dateien.Für ein generisches Git Repo:
Wenn Sie Dateien herunterladen und das Repository nicht mit dem Verlauf klonen möchten, können Sie dies mit tun
git-archive
.git-archive
erstellt ein komprimiertes Zip- oder Tar-Archiv eines Git-Repositorys. Einige Dinge, die es besonders machen:.git/
Ordner oder nicht verfolgte Dateien im Repository, auf dem er ausgeführt wird, werden nicht archiviert .Ein Beispiel für das Erstellen eines Archivs des
docs/usage
Verzeichnisses aus einem Remote-Repo, mit dem Sie über ssh verbunden sind:Weitere Informationen in diesem Blog-Beitrag und in der Git-Dokumentation .
Hinweis zu GitHub Repos:
GitHub erlaubt keinen
git-archive
Zugriff . ☹️quelle
git archive --format tar
Format ist nicht tar.gz, sondern tar.Ich habe ein Open Source-Projekt namens GitHubFolderDownloader erstellt . Sie können einen einzelnen Ordner eines Repositorys herunterladen, ohne das gesamte Repository zu klonen oder herunterzuladen.
quelle
An anderen Antworten ist nichts auszusetzen, aber ich dachte nur, ich würde Schritt für Schritt Anweisungen für diejenigen geben, die zum ersten Mal durch diesen Prozess wandern.
So laden Sie einen einzelnen Ordner aus einem Github-Repository (Mac OS X) herunter:
Übrigens - Wenn Sie unter Windows oder einer anderen Plattform arbeiten, finden Sie einen binären Download von subversion (svn) unter http://subversion.apache.org
Aktualisieren
In Bezug auf den Kommentar zur Wiederaufnahme eines unterbrochenen Downloads / Checkout. Ich würde versuchen zu rennen,
svn cleanup
gefolgt vonsvn update
. Bitte suchen Sie SO nach zusätzlichen Optionen.quelle
Wer an einem bestimmten Ordner arbeitet, muss diesen bestimmten Ordner selbst klonen. Führen Sie dazu die folgenden Schritte aus, indem Sie die Sparse-Checkout-Funktion verwenden.
Erstellen Sie ein Verzeichnis.
Initialisieren Sie ein Git-Repository. (
git init
)Aktivieren Sie Sparse Checkouts. (
git config core.sparsecheckout true
)Sagen Sie Git, welche Verzeichnisse Sie möchten (echo 2015 / brand / May (siehe Ordner, an dem Sie arbeiten möchten) >>
.git/info/sparse-checkout
)Fügen Sie die Fernbedienung hinzu (
git remote add -f origin https://jafartke.com/mkt-imdev/DVM.git
)Holen Sie sich die Dateien (
git pull origin master
)quelle
Du kannst nicht; Im Gegensatz zu Subversion, bei der jedes Unterverzeichnis einzeln ausgecheckt werden kann, arbeitet Git auf der Basis eines gesamten Repositorys.
Für Projekte, bei denen ein differenzierterer Zugriff erforderlich ist, können Sie Submodule verwenden. Jedes Submodul ist ein separates Git-Projekt und kann daher einzeln geklont werden.
Es ist denkbar, dass ein Git-Frontend (z. B. die Webschnittstelle von GitHub oder gitweb) eine Schnittstelle zum Extrahieren eines bestimmten Ordners bereitstellt, aber meines Wissens tut dies keiner von ihnen (obwohl Sie damit einzelne Dateien herunterladen können Wenn der Ordner also nicht zu viele Dateien enthält, ist dies eine Option.)
Bearbeiten - GitHub bietet tatsächlich Zugriff über SVN, wodurch Sie genau dies tun können (gemäß Kommentar). Die neuesten Anweisungen hierzu finden Sie unter https://github.com/blog/1438-improved-svn-here-to-stay-old-svn-going-away
quelle
Wenn Sie den Ordner wirklich nur "herunterladen" und nicht "klonen" möchten (für die Entwicklung), ist dies der einfachste Weg, um einfach eine Kopie der neuesten Version des Repositorys (und damit eines Ordners / einer Datei darin) zu erhalten. Ohne das gesamte Repo klonen oder git installieren zu müssen, müssen Sie zunächst ein Zip-Archiv (für jedes Repo, jeden Fork, jede Verzweigung, jedes Commit usw.) herunterladen, indem Sie auf GitHub zum gewünschten Repository / Fork / Branch / Commit gehen (z. B.
http(s)://github.com/<user>/<repo>/commit/<Sha1>
für eine Kopie der Dateien, wie sie nach einem bestimmten Commit waren) und Auswahl derDownloads
Schaltfläche oben rechts.Dieses Archivformat enthält nichts von der Git-Repo-Magie, nur die verfolgten Dateien selbst (und vielleicht ein paar Gitignore-Dateien, wenn sie verfolgt wurden, aber Sie können diese ignorieren: p) - das heißt, wenn sich der Code ändert und Sie möchten Bleiben Sie auf dem Laufenden, Sie müssen es manuell erneut herunterladen und es bedeutet auch, dass Sie es nicht als Git-Repository verwenden können ...
Ich bin mir nicht sicher, ob Sie in diesem Fall danach suchen (wieder "Download" / View vs "Clone" / Develop), aber es kann trotzdem nützlich sein ...
quelle
tar.gz
:https://github.com/${owner}/${repo}/archive/${hash}.tar.gz
Zusammenfassung 2019
Es gibt verschiedene Möglichkeiten, dies zu handhaben, je nachdem, ob Sie dies manuell oder programmgesteuert tun möchten oder nicht.
Im Folgenden sind vier Optionen zusammengefasst. Und für diejenigen, die eine praktischere Erklärung bevorzugen, habe ich ein YouTube-Video zusammengestellt: Laden Sie einzelne Dateien und Ordner von GitHub herunter .
Außerdem habe ich auf StackOverflow eine ähnliche Antwort für diejenigen veröffentlicht, die einzelne Dateien von GitHub herunterladen müssen (im Gegensatz zu Ordnern).
1. GitHub-Benutzeroberfläche
2. Tools von Drittanbietern
https://github.com/babel/babel-eslint/tree/master/lib
) und klicken Sie auf "Herunterladen".3. Subversion
svn export https://github.com/babel/babel-eslint/trunk/lib
und drücken Sie die Eingabetaste.4. GitHub API
https://api.github.com/repos/:owner/:repo/contents/:path
. Nach dem Ersetzen der Platzhalter lautet ein Beispielendpunkt:https://api.github.com/repos/babel/babel-eslint/contents/lib
. Auf diese Weise erhalten Sie JSON-Daten für den gesamten Inhalt dieses Ordners. Die Daten enthalten alles, was Sie benötigen, einschließlich der Frage, ob es sich bei dem Inhalt um einen Ordner oder eine Datei handelt, eine Download-URL, wenn es sich um eine Datei handelt, und einen API-Endpunkt, wenn es sich um einen Ordner handelt (damit Sie die Daten für diesen Ordner abrufen können). Mit diesen Daten kann das Skript rekursiv den gesamten Inhalt des Zielordners durchsuchen, Ordner für verschachtelte Ordner erstellen und alle Dateien für jeden Ordner herunterladen. Schauen Sie sich den DownGit-Code an, um sich inspirieren zu lassen.quelle
Ein weiteres konkretes Beispiel:
Als ob ich den Ordner 'iOS Pro Geo' von der URL herunterladen möchte
https://github.com/alokc83/APRESS-Books-Source-Code-/ tree / master /% 20Pro% 20iOS% 20Geo
und ich kann das über
Beachten Sie den Stamm im Pfad
Bearbeitet: (gemäß Kommentar von Tommie C)
Ja, die Verwendung von Export anstelle von Checkout würde eine saubere Kopie ohne zusätzliche Git-Repository-Dateien ergeben.
Bearbeitet: Wenn Baum / Master nicht in der URL vorhanden ist, dann Fork it und es wird dort in der Forked URL vorhanden sein.
quelle
Es gibt ein Python3-Pip-Paket namens
githubdl
, das dies kann *:Die Projektseite ist hier
* Haftungsausschluss: Ich habe dieses Paket geschrieben.
quelle
Es ist einer der wenigen Orte, an denen SVN besser ist als Git.
Am Ende haben wir uns auf drei Optionen konzentriert:
quelle
Wenn Sie mit Unix-Befehlen vertraut sind, benötigen Sie hierfür keine speziellen Abhängigkeiten oder Web-Apps. Sie können das Repo als Tarball herunterladen und nur das entpacken, was Sie benötigen.
Beispiel (woff2-Dateien aus einem Unterverzeichnis in fontawesome):
*/
) bei, damit er mit einem beliebigen Verzeichnis übereinstimmt. Github erstellt ein Wrapper-Verzeichnis mit dem Commit-Verweis im Namen, sodass es nicht bekannt ist.--strip-components
mit der Anzahl der Schrägstriche (/
) im Pfad (vorheriges Argument) identisch sein .Dadurch wird der gesamte Tarball heruntergeladen. Verwenden Sie die in den anderen Antworten erwähnte SVN-Methode, wenn dies vermieden werden muss oder wenn Sie nett zu den GitHub-Servern sein möchten.
quelle
Sie können den Verzeichnisbaum einfach herunterladen:
Aber wenn Sie es überprüfen und Commits ausführen und zurückschieben möchten, können Sie das nicht tun.
quelle
Um die obigen Antworten zu erweitern, wäre ein echtes Beispiel von einem echten GitHub-Repository in ein lokales Verzeichnis:
Manchmal hilft ein konkretes Beispiel, die vorgeschlagenen Substitutionen zu verdeutlichen.
quelle
Keine der Antworten half in meiner Situation. Wenn Sie für Windows entwickeln, haben Sie wahrscheinlich kein SVN. In vielen Situationen kann man sich auch nicht darauf verlassen, dass Benutzer Git installiert haben oder aus anderen Gründen nicht ganze Repositorys herunterladen möchten. Einige der Personen, die diese Frage beantworteten, wie Willem van Ketwich und Aztack, stellten Werkzeuge her, um diese Aufgabe zu erfüllen. Wenn das Tool jedoch nicht für die von Ihnen verwendete Sprache geschrieben ist oder Sie keine Bibliothek eines Drittanbieters installieren möchten, funktionieren diese nicht.
Es gibt jedoch einen viel einfacheren Weg. GitHub verfügt über eine API, mit der Sie mithilfe von GET-Anforderungen eine einzelne Datei oder den gesamten Inhalt eines Verzeichnisses herunterladen können . Sie können auf ein Verzeichnis zugreifen, indem Sie
https://api.github.com/repos/:owner/:repo_name/contents/:path
ein JSON-Objekt zurückgeben, das alle Dateien im Verzeichnis auflistet. In der Aufzählung ist ein Link zum Rohinhalt der Datei, demdownload_url
Parameter, enthalten. Die Datei kann dann unter dieser URL heruntergeladen werden.Es ist ein zweistufiger Prozess, der die Fähigkeit erfordert, GET-Anfragen zu stellen. Dies kann jedoch in nahezu jeder Sprache und auf jeder Plattform implementiert werden. Es kann verwendet werden, um Dateien oder Verzeichnisse abzurufen.
quelle
Unser Team hat dazu ein Bash-Skript geschrieben, da wir SVN nicht auf unserem Bare-Bones-Server installieren mussten.
https://github.com/ojbc/docker/blob/master/java8-karaf3/files/git-download.sh
Es verwendet die Github-API und kann wie folgt über die Befehlszeile ausgeführt werden:
quelle
Ich benutze Linux, also füge dies in ~ / .bashrc ein, genannt sogar: D $ HOME / .bashrc
Aktualisieren Sie dann die Shell mit
dann benutze es mit git-downloadfolder blablabla: D.
quelle
Ich arbeite mit CentOS 7-Servern, auf denen ich weder Root-Zugriff noch Git, SVN usw. habe (und auch nicht möchte!). Deshalb habe ich ein Python-Skript erstellt, um einen beliebigen Github-Ordner herunterzuladen: https://github.com/andrrrl/github -ordner-downloader
Die Verwendung ist einfach. Kopieren Sie einfach den relevanten Teil aus einem Github-Projekt. Angenommen, das Projekt lautet https://github.com/MaxCDN/php-maxcdn/ . Sie möchten einen Ordner, in dem sich nur einige Quelldateien befinden. Dann müssen Sie mach so etwas wie:
$ python gdownload.py "/MaxCDN/php-maxcdn/tree/master/src" /my/target/dir/
(erstellt einen Zielordner, wenn dieser nicht vorhanden ist)
Es erfordert eine lxml- Bibliothek, kann installiert werden mit
easy_install lxml
Wenn Sie keinen Root-Zugriff haben (wie ich), können Sie eine
.pydistutils.py
Datei$HOME
mit folgenden Inhalten in Ihr Verzeichnis erstellen :[install] user=1
Undeasy_install lxml
funktioniert einfach (Ref: https://stackoverflow.com/a/) 33464597/591257 ).quelle
Nur noch 5 Schritte
quelle
Um ein Verzeichnis aus GitHub zu exportieren, ersetzen Sie "/ tree / master /" in der URL des Verzeichnisses durch "/ trunk /".
Zum Beispiel, um das Verzeichnis von der folgenden URL zu exportieren:
Führen Sie den folgenden Befehl aus:
quelle
Eine einfache Antwort darauf ist, zuerst den Schildkröten-SVN über den folgenden Link zu schildern.
Aktivieren Sie während der Installation die CLI-Option, damit sie über die Befehlszeilenschnittstelle verwendet werden kann.
Kopieren Sie den Link zum Git Hub-Unterverzeichnis.
Baum / Meister durch Stamm ersetzen
und TU
Dateien werden in den Ordner deeplab im aktuellen Verzeichnis heruntergeladen.
quelle
Sie können git svn folgendermaßen verwenden.
Auf diese Weise müssen Sie sich nicht die Mühe machen, svn speziell für Windows-Benutzer einzustellen.
quelle
sudo apt install git-svn
ist erforderlich, wenn Sie die WSL durchlaufen.Wenn Sie dies programmgesteuert tun müssen und sich nicht auf SVN verlassen möchten, können Sie die GitHub-API verwenden, um alle Inhalte rekursiv herunterzuladen.
Zur Inspiration hier mein Rubin-Kern: https://gist.github.com/cvengros/b2a7e82f66519d423b6f
quelle
Verwenden Sie diese Funktion. Das erste Argument ist die URL zum Ordner, das zweite ist der Ort, an den der Ordner heruntergeladen wird:
quelle
git clone --filter
ab Git 2.19Diese Option überspringt das Abrufen nicht benötigter Objekte vom Server:
Der Server sollte konfiguriert sein mit:
Das Git-Remote-Protokoll wurde erweitert, um diese Funktion in Version 2.19.0 zu unterstützen. Derzeit wird jedoch kein Server unterstützt. Es kann aber schon lokal getestet werden.
Ich habe dies ausführlicher behandelt unter: Wie klone ich nur ein Unterverzeichnis eines Git-Repositorys?
quelle
Aus irgendeinem Grund
svn
funktioniert die Lösung für mich nicht, und da ichsvn
nichts anderes benötige , war es nicht sinnvoll, Zeit damit zu verbringen, sie zu erstellen. Deshalb suchte ich nach einer einfachen Lösung mit Tools, die ich bereits hatte. Dieses Skript verwendet nurcurl
undawk
zum Herunterladen aller Dateien in einem GitHub-Verzeichnis, das als beschrieben wird"/:user:repo/contents/:path"
.Der zurückgegebene Text eines Aufrufs des GitHub REST API-
"GET /repos/:user:repo/contents/:path"
Befehls gibt ein Objekt zurück, das einen"download_url"
Link für jede Datei in einem Verzeichnis enthält.Dieses Befehlszeilenskript ruft diese REST-API mithilfe
curl
von AWK auf und sendet das Ergebnis über AWK. Dabei werden alle Zeilen außer den Zeilen "download_url" herausgefiltert, Anführungszeichen und Kommas aus den Links gelöscht und die Links dann mithilfe eines anderen Aufrufs zum Einrollen heruntergeladen.quelle
git sparse-checkout
Beispiel mit aktueller Version :
Vor allem
--sparse
checkt nur Verzeichnisdateien der obersten Ebene desgit
Repositorys in die Arbeitskopie ausgit sparse-checkout add t
Inkrementeller Hinzufügen /t
Auschecken des Unterordners vongit
Andere Elemente
git sparse-checkout init
trifft einige Vorbereitungen, um teilweise Kassen zu ermöglichen--filter=blob:none
optimiert das Abrufen von Daten, indem nur die erforderlichen Git-Objekte heruntergeladen werden ( weitere Informationen finden Sie in der Funktion zum teilweisen Klonen ).--cone
Beschleunigt auch die Leistung durch Anwenden eingeschränkterer Einschlussmuster für DateienGitHub-Status
quelle