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:

git@github.com: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.


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.


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.


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 .


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

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 . ☹️


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.


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.


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)


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


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 ...


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.

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.


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.


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.

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.


5

Sie können den Verzeichnisbaum einfach herunterladen:

git archive --remote git@github.com: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.


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.


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.



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.


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


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


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

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.


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.


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"  
}

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?


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"); }'

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 )


Upvoted. Ich habe diesen Befehl in stackoverflow.com/a/59515426/6309 mit dem festgelegten Klonmuster vorgestellt .
VonC
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.