Laden Sie einen einzelnen Ordner oder ein einzelnes Verzeichnis von einem GitHub-Repo herunter

1105

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.

g_inherit
quelle
4
Ich habe ein Shell-Skript dafür mit svn checkout geschrieben - github.com/Decad/github-downloader
Declan Cook
390
Kann mir jemand erklären, warum es dafür keine "offizielle" Webinterface-Lösung gibt? Die Implementierung scheint trivial zu sein, ist aber sehr nützlich.
Alexander - Reinstate Monica
3
Ich habe eine Chrom-Erweiterung mit KinoLiens Gitzip entwickelt. github.com/charany1/GHSDD
charany1
3
siehe @janos Antwort SVN Alternative ist die beste, keine Authentifizierung, keine Registrierung, kein Limit, keine Plugins
Stackdave
5
Ich habe eine leichte Lösung dafür gemacht ( download-directory.github.io ) und sie ist in Refined GitHub integriert
fregante

Antworten:

1034

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 lodashals Beispiel verwenden.

  1. Navigieren Sie zu dem Ordner, den Sie herunterladen möchten . Lassen Sie uns /testvon der masterNiederlassung herunterladen . Beispiel für eine Github-Repo-URL

  2. Ändern Sie die URL für die Subversion . Ersetzen tree/masterdurch trunk.

    https://github.com/lodash/lodash/tree/master/test

    https://github.com/lodash/lodash/trunk/test

  3. Laden Sie den Ordner herunter . Gehen Sie zur Befehlszeile und greifen Sie auf den Ordner mit SVN zu.

svn checkout https://github.com/lodash/lodash/trunk/test

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.

Vollständige Erklärung des URL-Formats:

  • Wenn Sie an einer masterBranche interessiert sind , verwenden Sie trunkstattdessen. Der volle Weg ist alsotrunk/foldername
  • Wenn Sie an einer fooBranche interessiert sind , verwenden Sie branches/foostattdessen. Der vollständige Pfad sieht aus wiebranches/foo/foldername
  • Protip: svn lsWenn Sie möchten, können Sie verfügbare Tags und Zweige vor dem Herunterladen anzeigen

Das ist alles! Github unterstützt auch weitere Subversion-Funktionen , einschließlich der Unterstützung für das Festschreiben und Übertragen von Änderungen.

Nick
quelle
162
Awesome, ersetzen Sie einfach tree/mastermit trunkund Sie können den spezifischen Ordner erhalten.
Sérgio Michels
6
Thanks @ user1146881 und @ SérgioMichels, müssen Sie ersetzen tree/mastermit trunk. Diese Informationen sollten als Antwort hinzugefügt werden.
Taufe
8
Ich habe dies geändert, um es zu verwenden 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.)
Grault
5
@ num3ric- Entschuldigung für die späte Antwort, aber Sie sollten in der Lage sein, "Stamm" durch "Zweige / Ihre Branche" zu ersetzen
Nick
2
@ElijahLynn Danke für die Bearbeitung, ich hätte diese Info einfügen sollen! 2 Dinge - Ich habe Ihre Bearbeitung akzeptiert, aber einige meiner eigenen zurückgesetzt (wollte das sowieso tun, es fühlte sich zu chaotisch an). Außerdem habe ich Ihren branchWeg geändert branches, was ich für richtig halte . Wenn nicht, ändern Sie es zurück.
Nick
567

Zwei Optionen für diese Funktion:

Option 1: GitZip-Browsererweiterung

Chrome-Erweiterung , Firefox-Addon

Verwendungszweck:

  1. Auf jeder GitHub-Reposeite.
  2. Doppelklicken Sie einfach auf den leeren Teil der gewünschten Elemente.
  3. Klicken Sie unten rechts auf die Schaltfläche zum Herunterladen.
  4. Sehen Sie sich das Fortschritts-Dashboard an und warten Sie, bis der Browser den Trigger heruntergeladen hat.
  5. Holen Sie sich die ZIP-Datei.

Bekomme Token:

  1. Klicken Sie in Ihrem Browser auf das GitZip-Erweiterungssymbol.
  2. Klicken Sie neben "Get Token" auf den Link "Normal" oder "Privat".
  3. Autorisieren Sie die GitZip-Berechtigung auf der Github-Authentifizierungsseite.
  4. Zurück zur Repo-Seite vom Anfang.
  5. Weiter verwenden.

Option 2: Github Gh-Seite

http://kinolien.github.io/gitzip mithilfe der GitHub-API und der JSZip-Bibliotheken FileSaver.js.

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.

Kino
quelle
5
Das ist großartig, aber es sieht so großartig aus, dass die Nachfrage Sie über Ihr Ratelimit hinaus treibt und es nicht mehr funktioniert ;-) Es wäre großartig, sich mit GitHub oAuth anmelden zu können - was private Repo-Unterstützung ermöglichen und auch erhöhen würde Ihr
Ratenlimit
3
@hobailey Jetzt kann es Zugriffstoken erhalten, um das Ratenlimit zu erhöhen, und auch auf private Repos zugreifen.
Kino
1
@MYounas Weitere Informationen zu OAuth, Bäumen und Blobs finden Sie im Github API- Dokument . und verwenden Sie auch JSZip, FileSaver.js js Bibliotheken für die Gitzip-Implementierung.
Kino
1
Würde sich jemand für eine Chrome-Erweiterung interessieren, die dies tut?
Goldylucks
4
Dies muss wirklich zur eigentlichen Github-Website hinzugefügt werden, es ist äußerst nützlich.
rollt
508

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-


DownGit


Sie können auch die heruntergeladene Datei Eigentums- konfigurieren detaillierte Nutzungs .

Minhas Kamal
quelle
2
Bro, ich meine, wie du ein Projekt wie DownGit erstellst, das du erstellt hast.
Muhammad Younus
12
Die Basismethode ist: 1. Nehmen Sie den Verzeichnislink (verwendete Winkelroute ), 2. Gehen Sie zur GitHub-API , 3. Durchsuchen Sie das Verzeichnis und laden Sie alle Dateien herunter, 4. Erstellen Sie damit eine Zip-Datei (ich habe jszip verwendet ). & speichern Sie es als Datei (verwendet Dateisparer dafür). Zum klaren Verständnis würde ich vorschlagen, einen Blick in mein Projekt zu werfen .
Minhas Kamal
1
Vielen Dank, Bro, für detaillierte Anweisungen. Ich bin Ihnen sehr dankbar, wenn Sie ein Tutorial oder einen Link vorschlagen.
Muhammad Younus
5
Das ist cool, aber es funktioniert nicht mit automatisierten Tools (wie wget)
Ring
1
Dies hängt ab, downloaded 25 of 25 fileswenn ich versuche, von dieser URL herunterzuladen: github.com/dssg/hitchhikers-guide/tree/master/curriculum/…
Wassadamo
164

Wenn Sie haben svn, können svn exportSie dies tun:

svn export https://github.com/foobar/Test.git/trunk/foo

Beachten Sie das URL-Format:

  • Die Basis-URL lautet https://github.com/
  • /trunk am Ende angehängt

Bevor Sie ausführen svn export, sollten Sie zunächst den Inhalt des Verzeichnisses überprüfen mit:

svn ls https://github.com/foobar/Test.git/trunk/foo
Janos
quelle
Funktioniert das noch Versuchte dies mit TortiseSVN und ich erhalte einen Berechtigungsfehler, der mich auffordert, Anmeldeinformationen anzugeben.
John
2
@john Ich bin mir sicher, dass dies zu spät ist, um viel zu helfen, aber haben Sie die 2-Faktor-Authentifizierung in Ihrem GitHub-Konto aktiviert? Wenn ja, glaube ich , habe ich irgendwo gelesen, dass Sie einen vorgenerierten Schlüssel für das Passwort verwenden müssen (den Sie in den GitHub-Einstellungen finden müssen).
Nick
1
In Bezug auf die URL-Formatierung können Sie die .gitErweiterung beibehalten. Sie können den vollständigen Projektlink verwenden und zunächst svn lsden 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 /trunkfolgenden Pfad hinzu, wie z svn export https://github.com/RobTillaart/Arduino.git/trunk/libraries/DHTlib. Es ist einfacher, den Projektpfad intakt zu halten.
Jgrocha
@jgrocha Ich bin nicht sicher, ob es 2013 so funktioniert hat, aber jetzt, also danke, aktualisiert den Post
Janos
1
Ein Beispiel: Um den Inhalt herunterzuladen https://github.com/miguelgrinberg/python-socketio/tree/master/examples/wsgi, führen Sie ihn aus svn export https://github.com/miguelgrinberg/python-socketio.git/trunk/examples/wsgi. Ein aufgerufenes Verzeichnis wsgiwird unter dem aktuellen Arbeitsverzeichnis erstellt. Nur Quelldateien, sonst nichts. Nein .git, keine Subversion-bezogenen Dateien.
Rockallite
74

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-archiveerstellt ein komprimiertes Zip- oder Tar-Archiv eines Git-Repositorys. Einige Dinge, die es besonders machen:

  1. Sie können auswählen, welche Dateien oder Verzeichnisse im Git-Repository archiviert werden sollen.
  2. Der .git/Ordner oder nicht verfolgte Dateien im Repository, auf dem er ausgeführt wird, werden nicht archiviert .
  3. Sie können einen bestimmten Zweig, ein bestimmtes Tag oder ein bestimmtes Commit archivieren. Mit git verwaltete Projekte verwenden dies häufig, um Archive von Versionen des Projekts (Beta, Release, 2.0 usw.) zu generieren, die Benutzer herunterladen können.

Ein Beispiel für das Erstellen eines Archivs des docs/usageVerzeichnisses aus einem Remote-Repo, mit dem Sie über ssh verbunden sind:

# in terminal
$ git archive --format tar --remote ssh://server.org/path/to/git HEAD docs/usage > /tmp/usage_docs.tar

Weitere Informationen in diesem Blog-Beitrag und in der Git-Dokumentation .

Hinweis zu GitHub Repos:

GitHub erlaubt keinen git-archiveZugriff . ☹️

RobW
quelle
2
git archive --format tarFormat ist nicht tar.gz, sondern tar.
羽 和 之
Dies sollte die beste Antwort sein
Felipe Costa
2
Ich denke, dies ist die beste Antwort, aber beachten Sie, dass der Befehl git archive nicht mit dem https-Protokoll funktioniert.
Bitfox
@yukihane bearbeitete Erweiterung von tar.gz zu tar, hoffentlich ist OP mit an Bord
mihai
36

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.

VahidN
quelle
Funktioniert hervorragend, wenn Sie nur Ordner von GitHub herunterladen müssen. Es wird nur ein Github-Token benötigt , um den gewünschten Ordner herunterzuladen. Weitere positive Stimmen könnten dieser Antwort eine gewisse Bedeutung verleihen.
Alex Essilfie
34

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:

~ Um das Terminal zu öffnen, klicken Sie einfach auf Spotlight und geben Sie Terminal ein. Drücken Sie dann die Eingabetaste

  1. Auf einem Mac haben Sie wahrscheinlich bereits SVN (um nur das geöffnete Terminal zu testen und "svn" oder "which svn" ~ ohne Anführungszeichen einzugeben)
  2. Auf Github: Suchen Sie den Github-Pfad zu Ihrem Git-Ordner (nicht zum Repo), indem Sie auf den bestimmten Ordnernamen in einem Repo klicken
  3. Kopieren Sie den Pfad aus der Adressleiste des Browsers
  4. Öffnen Sie das Terminal und geben Sie Folgendes ein : svn export
  5. Fügen Sie als Nächstes die Adresse ein (z. B.): https://github.com/mingsai/Sample-Code/tree/master/HeadsUpUI
  6. Ersetzen Sie die Wörter: Baum / Master
  7. mit dem Wort: Kofferraum
  8. Geben Sie den Zielordner für die Dateien ein (in diesem Beispiel speichere ich den Zielordner im Ordner Downloads für den aktuellen Benutzer).
  9. Hier ist Leerzeichen nur die Leertaste, nicht das Wort (Leerzeichen) ~ / Downloads / HeadsUpUI
  10. Der letzte Terminalbefehl zeigt den vollständigen Befehl zum Herunterladen des Ordners (vergleichen Sie die Adresse mit Schritt 5) svn export https://github.com/mingsai/Sample-Code/trunk/HeadsUpUI ~ / Downloads / HeadsUpUI

Übrigens - Wenn Sie unter Windows oder einer anderen Plattform arbeiten, finden Sie einen binären Download von subversion (svn) unter http://subversion.apache.org

~ Wenn Sie den Ordner auschecken möchten, anstatt ihn einfach herunterzuladen, verwenden Sie die svn-Hilfe (tldr: Export durch Auschecken ersetzen )

Aktualisieren

In Bezug auf den Kommentar zur Wiederaufnahme eines unterbrochenen Downloads / Checkout. Ich würde versuchen zu rennen, svn cleanupgefolgt von svn update. Bitte suchen Sie SO nach zusätzlichen Optionen.

Tommie C.
quelle
1
Ich muss viele Dateien aus einem bestimmten Ordner herunterladen und habe diesen Fehler mitten im Download erhalten: svn: E175002: BERICHT von '/ bgmartins / scripts-parlamento /! Svn / vcc / default': 200 OK ( github.com ) Wie kann ich den Download fortsetzen?
Miguel
Hat für mich gearbeitet. Das ist erstaunlich.
Heath Raftery
24

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.

  1. Erstellen Sie ein Verzeichnis.

  2. Initialisieren Sie ein Git-Repository. ( git init)

  3. Aktivieren Sie Sparse Checkouts. ( git config core.sparsecheckout true)

  4. Sagen Sie Git, welche Verzeichnisse Sie möchten (echo 2015 / brand / May (siehe Ordner, an dem Sie arbeiten möchten) >> .git/info/sparse-checkout)

  5. Fügen Sie die Fernbedienung hinzu ( git remote add -f origin https://jafartke.com/mkt-imdev/DVM.git)

  6. Holen Sie sich die Dateien ( git pull origin master)

Mohammed Jafar
quelle
Schade, dass dieser Kommentar nicht genug positive Stimmen bekommen hat. Die bereitgestellte Lösung gilt anscheinend für alle Git-Repositories und nicht nur für das Github-Repository.
Kalyan
9
Dies macht jedoch nicht das, was gewünscht wurde. Es klont immer noch das gesamte Repository, es werden nur einige Ordner nicht ausgecheckt.
Chris
Ich erhalte die folgende Fehlermeldung: Beim spärlichen Auschecken bleibt kein Eintrag im Arbeitsverzeichnis.
Orangecaterpillar
20

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

michel-slm
quelle
Gibt es etwas über die Github-API?
g_inherit
14

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 der DownloadsSchaltflä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 ...

Johnny
quelle
9
Wenn Sie keinen Download-Link sehen, stellen Sie sicher, dass Sie sich auf einer Repo-Hauptseite befinden (nicht in einem untergeordneten Verzeichnis). Anscheinend können Sie nur eine Zip-Datei des gesamten Repos herunterladen. Auch diese Github Hilfeseite könnte nützlich sein.
JD Smith
2
Einfacher Point-and-Click-Zugriff. Einfach eine vorherige Version zu bekommen. Einfach, den gewünschten Ordner aus der heruntergeladenen Zip-Datei zu ziehen. Vielen Dank.
Andy Thomas
1
Die generische URL zum Herunterladen von in tar.gz:https://github.com/${owner}/${repo}/archive/${hash}.tar.gz
Krisztian
11

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

  • Auf der Homepage des Repositorys befindet sich ein Download-Button. Dies lädt natürlich das gesamte Repo herunter. Danach müssten Sie den Download entpacken und dann den gewünschten Ordner manuell herausziehen.

2. Tools von Drittanbietern

  • Es gibt eine Vielzahl von Browser-Erweiterungen und Web-Apps, die damit umgehen können, darunter auch DownGit . Fügen Sie einfach die GitHub-URL in den Ordner ein (z. B. https://github.com/babel/babel-eslint/tree/master/lib) und klicken Sie auf "Herunterladen".

3. Subversion

  • GitHub unterstützt kein Git-Archiv (die Git-Funktion, mit der wir bestimmte Ordner herunterladen können). GitHub unterstützt jedoch eine Vielzahl von Subversion-Funktionen, von denen wir eine für diesen Zweck verwenden können. Subversion ist ein Versionskontrollsystem (eine Alternative zu Git). Sie müssen Subversion installiert haben. Holen Sie sich die GitHub-URL für den Ordner, den Sie herunterladen möchten. Sie müssen diese URL jedoch ändern. Sie möchten den Link zum Repository, gefolgt vom Wort "Trunk", und mit dem Pfad zum verschachtelten Ordner enden. Mit anderen Worten, wenn wir dasselbe Beispiel für eine Ordnerverknüpfung verwenden, das ich oben erwähnt habe, würden wir "Baum / Master" durch "Stamm" ersetzen. Öffnen Sie abschließend ein Terminal, navigieren Sie zu dem Verzeichnis, in das der Inhalt heruntergeladen werden soll, und geben Sie den folgenden Befehl ein (ersetzen Sie die URL durch die von Ihnen erstellte URL):svn export https://github.com/babel/babel-eslint/trunk/libund drücken Sie die Eingabetaste.

4. GitHub API

  • Dies ist die Lösung, die Sie benötigen, wenn Sie diese Aufgabe programmgesteuert ausführen möchten. Und genau das nutzt DownGit unter der Haube. Schreiben Sie mithilfe der REST-API von GitHub ein Skript, das eine GET-Anforderung an den Inhaltsendpunkt sendet. Der Endpunkt kann wie folgt aufgebaut werden : 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.
Jabacchetta
quelle
9

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

svn checkout https://github.com/alokc83/APRESS-Books-Source-Code-/trunk/%20Pro%20iOS%20Geo

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.

svn export https://github.com/alokc83/APRESS-Books-Source-Code-/trunk/%20Pro%20iOS%20Geo

Bearbeitet: Wenn Baum / Master nicht in der URL vorhanden ist, dann Fork it und es wird dort in der Forked URL vorhanden sein.

Zeeawan
quelle
2
Sie müssen nur die Kaufabwicklung ändern, um sie zu exportieren, wenn Sie nur eine Kopie des Ordners herunterladen möchten, anstatt die Kaufabwicklung durchzuführen.
Tommie C.
Vielen Dank für Ihre Antwort, können wir einen Zweig tauchen? Nehmen wir an, ich möchte den aaa-Ordner von feature1 branch herunterladen
hsafarya
7

Es gibt ein Python3-Pip-Paket namens githubdl, das dies kann *:

export GIT_TOKEN=1234567890123456789012345678901234567890123
pip install githubdl
githubdl -u http://github.com/foobar/test -d foo

Die Projektseite ist hier

* Haftungsausschluss: Ich habe dieses Paket geschrieben.

Willem van Ketwich
quelle
6

Es ist einer der wenigen Orte, an denen SVN besser ist als Git.

Am Ende haben wir uns auf drei Optionen konzentriert:

  1. Verwenden Sie wget, um die Daten von GitHub abzurufen (mithilfe der Rohdateiansicht).
  2. Lassen Sie vorgelagerte Projekte die erforderliche Datenuntermenge als Build-Artefakte veröffentlichen.
  3. Gib auf und nutze die volle Kasse. Es ist ein großer Erfolg beim ersten Build, aber wenn Sie nicht viel Verkehr haben, ist es in den folgenden Builds kein allzu großer Aufwand.
Manish Shrivastava
quelle
4
Nun, es ist weniger Git vs Subversion als vielmehr, dass GitHub Flat-Out kein Git-Archiv zulässt. (Ich würde gerne wissen warum.)
Rob Howard
6

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):

curl -L https://api.github.com/repos/FortAwesome/Font-Awesome/tarball | tar xz --wildcards "*/web-fonts-with-css/webfonts/*.woff2" --strip-components=3
  • Weitere Informationen zum Linkformat: https://developer.github.com/v3/repos/contents/#get-archive-link (einschließlich des Abrufs einer Zip-Datei oder bestimmter Zweige / Refs)
  • Behalten Sie den ersten Teil des Pfads ( */) bei, damit er mit einem beliebigen Verzeichnis übereinstimmt. Github erstellt ein Wrapper-Verzeichnis mit dem Commit-Verweis im Namen, sodass es nicht bekannt ist.
  • Sie möchten wahrscheinlich --strip-componentsmit 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.

Albin
quelle
5

Sie können den Verzeichnisbaum einfach herunterladen:

git archive --remote [email protected]:foobar/Test.git HEAD:foo | tar xf -

Aber wenn Sie es überprüfen und Commits ausführen und zurückschieben möchten, können Sie das nicht tun.

araqnid
quelle
1
Ungültiger Befehl: 'git-upload-archive' foobar / Test.git '' Sie scheinen ssh zu verwenden, um eine git: // URL zu klonen. Stellen Sie sicher, dass Ihre Konfigurationsoption core.gitProxy und die Umgebungsvariable GIT_PROXY_COMMAND NICHT festgelegt sind. fatal: Das Remote-Ende hat unerwartet aufgelegt. tar: Dies sieht nicht aus wie ein Teer-Archiv. tar: Beendet mit Fehlerstatus aufgrund früherer Fehler
g_inherit
@g_inherit Ich kann dieses Problem reproduzieren. Obwohl dies die richtige Richtung sein könnte, ist diese Antwort ungültig.
Uli Köhler
Trotz so vieler Abstimmungen ist dies der einzige Rat, der für mich funktioniert hat.
Bhaskarc
5

Um die obigen Antworten zu erweitern, wäre ein echtes Beispiel von einem echten GitHub-Repository in ein lokales Verzeichnis:

svn ls https://github.com/rdcarp/playing-cards/trunk/PumpkinSoup.PlayingCards.Interfaces

svn export https://github.com/rdcarp/playing-cards/trunk/PumpkinSoup.PlayingCards.Interfaces  /temp/SvnExport/Washburn

Manchmal hilft ein konkretes Beispiel, die vorgeschlagenen Substitutionen zu verdeutlichen.

John Washburn
quelle
5

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/:pathein JSON-Objekt zurückgeben, das alle Dateien im Verzeichnis auflistet. In der Aufzählung ist ein Link zum Rohinhalt der Datei, dem download_urlParameter, 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.

Calvin
quelle
4

Ich benutze Linux, also füge dies in ~ / .bashrc ein, genannt sogar: D $ HOME / .bashrc

git-dowloadfolder(){
a="$1"
svn checkout ${a/tree\/master/trunk}

}

Aktualisieren Sie dann die Shell mit

source ~/.bashrc 

dann benutze es mit git-downloadfolder blablabla: D.

user1088530
quelle
3

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.pyDatei $HOMEmit folgenden Inhalten in Ihr Verzeichnis erstellen : [install] user=1 Und easy_install lxmlfunktioniert einfach (Ref: https://stackoverflow.com/a/) 33464597/591257 ).

aesede
quelle
3

Nur noch 5 Schritte

1) Laden Sie SVN von hier .
2) Öffnen Sie CMD und wechseln Sie wie folgt in das SVN-Bin-Verzeichnis :

cd %ProgramFiles%\SlikSvn\bin

3) Nehmen wir an , ich wan diese zum Download - Verzeichnis URL 4) Jetzt Ersetzen Mit 5) Jetzt feuern diese letzte Befehl zum Download - Ordner in demselben Verzeichnis.
https://github.com/ZeBobo5/Vlc.DotNet/tree/develop/src/Samples

tree/develop
or
tree/master
trunk

svn export https://github.com/ZeBobo5/Vlc.DotNet/trunk/src/Samples

Muhammad Ali
quelle
Dies scheint nicht für private Repos zu funktionieren
Sundeep Pidugu
Ja, es wird nicht für private Respos funktionieren. GIT wird zum Herunterladen von privaten Antworten empfohlen.
Muhammad Ali
2

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:

https://github.com/liferay/liferay-plugins/tree/master/portlets/sample-hibernate-portlet

Führen Sie den folgenden Befehl aus:

svn export https://github.com/liferay/liferay-plugins/trunk/portlets/sample-hibernate-portlet
Mohsen Abasi
quelle
2

Eine einfache Antwort darauf ist, zuerst den Schildkröten-SVN über den folgenden Link zu schildern.

https://tortoisesvn.net/downloads.html

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.

Beispiel

https://github.com/tensorflow/models/tree/master/research/deeplab

Baum / Meister durch Stamm ersetzen

https://github.com/tensorflow/models/trunk/research/deeplab

und TU

svn checkout https://github.com/tensorflow/models/trunk/research/deeplab

Dateien werden in den Ordner deeplab im aktuellen Verzeichnis heruntergeladen.

Khan
quelle
2

Sie können git svn folgendermaßen verwenden.

git svn clone https://github.com/lodash/lodash/trunk/test

Auf diese Weise müssen Sie sich nicht die Mühe machen, svn speziell für Windows-Benutzer einzustellen.

V3K3R
quelle
Vielen Dank. Ich kann dafür bürgen, dass es für Windows funktioniert. Funktioniert aber nicht mit gcloud. Es heißt git: 'svn' ist kein Befehl
JOSEPH Blessingh
sudo apt install git-svnist erforderlich, wenn Sie die WSL durchlaufen.
Jammy Dodger
1

Verwenden Sie diese Funktion. Das erste Argument ist die URL zum Ordner, das zweite ist der Ort, an den der Ordner heruntergeladen wird:

function github-dir() {
    svn export "$(sed 's/tree\/master/trunk/' <<< "$1")" "$2"  
}
Glückliches Gesicht
quelle
1

git clone --filter ab Git 2.19

Diese Option überspringt das Abrufen nicht benötigter Objekte vom Server:

git clone --depth 1 --no-checkout --filter=blob:none \
  "file://$(pwd)/server_repo" local_repo
cd local_repo
git checkout master -- mydir/

Der Server sollte konfiguriert sein mit:

git config --local uploadpack.allowfilter 1
git config --local uploadpack.allowanysha1inwant 1

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?

Ciro Santilli 冠状 病毒 审查 六四 事件 法轮功
quelle
1
Interessant und positiv bewertet. Ich nehme an, ich muss diese 2.19-Funktion an anderer Stelle erwähnt haben.
VonC
@VonC Ich glaube, ich habe dich einmal geschlagen: stackoverflow.com/questions/2466735/… und ich habe es mir erst nach der Veröffentlichung von XD angesehen! Ich habe heute natürlich ein bisschen nach der Veröffentlichung von 2.22 gegoogelt, alle Antworten wurden natürlich bereits aktualisiert ;-) Es amüsiert mich immer wieder, dass immer noch ein halbes Duplikat übrig ist, und ich finde es ein Jahr später mit eine etwas andere Abfrage. Ich habe nicht vor, dich auf Git zu schlagen, zu hart, aber behalte die Anzahl der Nekromanten im Auge! haha
Ciro Santilli 法轮功 病毒 审查. 事件 8
Nun, macht weiter so: Die gesamte Community wird von diesem kleinen Nebenwettbewerb profitieren (und ich habe Ihre andere Antwort damals
positiv bewertet
@VonC Scherz natürlich, ich stimme natürlich auch für deine Sachen. Ich muss nur einen Weg finden, diese Punkte jetzt in Geld einzulösen. XD
Ciro Santilli 8 病毒 审查 六四 事件 8
1

Aus irgendeinem Grund svnfunktioniert die Lösung für mich nicht, und da ich svnnichts 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 nur curlund awkzum 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 curlvon 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.

curl -s https://api.github.com/repos/:user/:repo/contents/:path | awk \
     '/download_url/ { gsub("\"|,", "", $2); system("curl -O "$2"); }'
Tannenzapfen
quelle
1

git sparse-checkout

Git 2.25.0 enthält einen neuen experimentellen git sparse-checkoutBefehl, der die Verwendung der vorhandenen Funktion vereinfacht, sowie einige wichtige Leistungsvorteile für große Repositorys. ( Der GitHub Blog )

Beispiel mit aktueller Version :

git clone --filter=blob:none --sparse https://github.com/git/git.git
cd git
git sparse-checkout init --cone
git sparse-checkout add t

Vor allem

  • --sparsecheckt nur Verzeichnisdateien der obersten Ebene des gitRepositorys in die Arbeitskopie aus
  • git sparse-checkout add tInkrementeller Hinzufügen / tAuschecken des Unterordners vongit

Andere Elemente

  • git sparse-checkout init trifft einige Vorbereitungen, um teilweise Kassen zu ermöglichen
  • --filter=blob:noneoptimiert 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 Dateien

GitHub-Status

GitHub evaluiert diese Funktion weiterhin intern, während sie in einigen ausgewählten Repositorys aktiviert ist [...]. Während sich die Funktion stabilisiert und ausgereift ist, werden wir Sie über den Fortschritt auf dem Laufenden halten. ( docs )

ford04
quelle
Upvoted. Ich habe diesen Befehl in stackoverflow.com/a/59515426/6309 mit dem festgelegten Klonmuster vorgestellt .
VonC