it-swarm.com.de

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

Wie kann ich nur einen bestimmten Ordner oder ein bestimmtes Verzeichnis von einem auf GitHub gehosteten Git-Repo herunterladen?

Angenommen, das Beispiel von GitHub-Repo lebt hier:

[email protected]:foobar/Test.git

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

792
g_inherit

Update September 2016: Es gibt ein paar Tools, die von der Community erstellt wurden und die dies für Sie tun können:


Git unterstützt das nicht, aber Github via SVN. Wenn Sie Ihren Code mit Subversion auschecken, konvertiert Github im Wesentlichen das Repo von git in Subversion im Backend und stellt dann das angeforderte Verzeichnis bereit.

So können Sie mit dieser Funktion einen bestimmten Ordner herunterladen. Ich verwende die beliebte Javascript-Bibliothek lodash als Beispiel.

  1. Holen Sie sich die Repo-URL. Kopieren Sie zunächst die URL des Github-Repos in Ihre Zwischenablage .  github repo URL example

  2. Ändern Sie die URL für Subversion. Ich möchte den Ordner unter /docs aus dem Zweig master herunterladen. Ich werde also trunk/docs anhängen. Die vollständige URL lautet jetzt https://github.com/lodash/lodash/trunk/docs. In meinem Hinweis unten finden Sie eine ausführlichere Erklärung, warum wir dieses URL-Format verwenden müssen.

  3. Laden Sie den Ordner herunter. Gehen Sie zur Befehlszeile und greifen Sie den Ordner mit SVN auf. svn checkout https://github.com/lodash/lodash/trunk/docs

Es wird möglicherweise nicht sofort eine Aktivität angezeigt, da Github bis zu 30 Sekunden für die Konvertierung größerer Repositories benötigt.

Erklärung zum vollständigen URL-Format:

  • Wenn Sie sich für master branch interessieren, verwenden Sie stattdessen trunk. Der vollständige Pfad ist also trunk/foldername
  • Wenn Sie sich für foo branch interessieren, verwenden Sie stattdessen branches/foo. Das vollständiger Pfad sieht aus wie branches/foo/foldername
  • Protip: Sie können svn ls verwenden, um verfügbare Tags und Verzweigungen vor dem Herunterladen anzuzeigen, wenn Sie dies wünschen

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

749
nick

Zwei Optionen für diese Funktion:

Option 1: Browsererweiterungen

Chrome-Erweiterung , Firefox-Addon

Verwendungszweck:

  1. In jeder GitHub-Reposeite. 
  2. Doppelklicken Sie einfach auf die gewünschten Artikel.
  3. Klicken Sie unten rechts auf Download.
  4. Sehen Sie sich das Fortschrittsdashboard an und warten Sie auf den Download des Browser-Triggers.
  5. Holen Sie sich die Zip-Datei.

Bekomme Token:

  1. Klicken Sie in Ihrem Browser auf das Symbol für die GitZip-Erweiterung.
  2. Klicken Sie neben "Get Token" auf "Normal" oder "Private".
  3. Autorisieren Sie die GitZip-Berechtigung auf der Github-Auth-Seite.
  4. Zurück zur Reposeite des Anfangs.
  5. Weiter verwenden.

Option 2: Github-Gh-Seite

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

Schritt 1: Geben Sie github url in das Feld oben rechts ein.
Schritt 2: Drücken Sie die Eingabetaste, oder klicken Sie auf Herunterladen, um die ZIP-Datei direkt herunterzuladen, oder klicken Sie auf Suchen, um die Liste der Unterordner und Dateien anzuzeigen.
Schritt 3: Klicken Sie auf "Download Zip File" oder "Get File", um die Dateien abzurufen.

In den meisten Fällen funktioniert es einwandfrei, mit der Ausnahme, dass der Ordner aufgrund der Einschränkung der Github Trees-API mehr als 1.000 Dateien enthält. (bezieht sich auf Github API # Inhalt )

Es kann auch private/öffentliche Repos unterstützen und das Ratenlimit erhöhen, wenn Sie über ein GitHub-Konto verfügen und den "get token" -Link auf dieser Site verwenden. 

423
Kino

Gehen Sie zu DownGit > Geben Sie Ihre URL ein> Download!

Jetzt können Sie DIRECTLY DOWNLOAD oder DOWNLOAD LINK für jedes öffentliche GitHub-Verzeichnis oder eine Datei (besonders große Datei) aus DownGit ! Hier ist eine einfache Demonstrations-


 DownGit


Sie können auch die Eigenschafts- detaillierte Verwendung der heruntergeladenen Datei konfigurieren.

371
Minhas Kamal

Wenn Sie svn haben, können Sie svn export dazu verwenden:

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 svn export ausführen, sollten Sie zunächst den Inhalt des Verzeichnisses mit folgendem Befehl überprüfen:

svn ls https://github.com/foobar/Test.git/trunk/foo
143
janos

Für ein generisches Git Repo:

Wenn Sie Dateien herunterladen möchten, nicht das Repository mit Historie klonen, können Sie dies mit git-archive tun.

git-archive erstellt 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. Es archiviert nicht den .git/-Ordner oder nicht gespeicherte Dateien in dem Repository, auf dem es ausgeführt wird.
  3. Sie können einen bestimmten Zweig, ein Tag oder ein Commit archivieren. Projekte, die mit git verwaltet werden, verwenden dies häufig zum Generieren von Archiven von Projektversionen (Beta, Release, 2.0 usw.), die Benutzer herunterladen können.

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

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

Weitere Informationen in diesem Blogbeitrag und der git-Dokumentation .

Hinweis zu GitHub Repos:

GitHub erlaubt keinen git-archive Zugriff . ☹️

60
RobW

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.

34
VahidN

Es ist nichts falsch mit anderen Antworten, aber ich dachte nur, ich würde Schritt-für-Schritt-Anweisungen für diejenigen geben, die diesen Prozess zum ersten Mal durchwandern.

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

  1. Auf einem Mac haben Sie wahrscheinlich bereits ein SVN (zum Testen nur das geöffnete Terminal und Geben Sie "svn" oder "welches svn" ~ ohne Anführungszeichen) ein.
  2. Bei Github: Suchen Sie den Github-Pfad zu Ihrem Git-Ordner (nicht zum Repo), indem Sie auf den entsprechenden Ordnernamen in einem Repo klicken
  3. Kopieren Sie den Pfad aus der Adressleiste des Browsers
  4. Open Terminal und geben Sie ein: svn export
  5. Nächste Einfügen in die Adresse (zB): https://github.com/mingsai/Sample-Code/tree/master/HeadsUpUI
  6. Ersetzen Sie die Wörter: tree/master 
  7. mit dem Wort: trunk
  8. Geben Sie den Zielordner für die Dateien ein (in diesem Beispiel Istore den Zielordner im Ordner "Downloads" für den aktuellen Benutzer ).
  9. Platz ist hier nur die Leertaste, nicht das Wort (Leerzeichen) ~/Downloads/HeadsUpUI
  10. Der letzte Terminalbefehl zeigt den vollständigen Befehl zum Herunterladen von Ordner (vergleichen Sie die Adresse mit Schritt 5) svn export https://github.com/mingsai/Sample-Code/trunk/HeadsUpUI ~/Downloads/HeadsUpUI

Übrigens - Wenn Sie Windows oder eine andere Plattform verwenden, finden Sie einen binären Download von Subversion (svn) unter http://Subversion.Apache.org .

~ Wenn Sie den Ordner auschecken möchten, statt ihn einfach herunterzuladen, versuchen Sie es mit der svn-Hilfe (tldr: ersetzen Sie export durch checkout).

Update

Zum Kommentar zum Fortsetzen eines unterbrochenen Download/Checkout. Ich würde versuchen, svn cleanup gefolgt von svn update auszuführen. Suchen Sie nach SO, um nach weiteren Optionen zu suchen.

28
Tommie C.

Du kannst nicht; Im Gegensatz zu Subversion, wo jedes Unterverzeichnis einzeln ausgecheckt werden kann, arbeitet Git auf Repository-Basis.

Für Projekte, bei denen ein differenzierter 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-Front-End (z. B. das GitHub-Webinterface oder Gitweb) ein Interface für das Extrahieren eines bestimmten Ordners bereitstellt. Dies ist jedoch meines Wissens nicht der Fall (obwohl Sie einzelne Dateien herunterladen können) Wenn der Ordner nicht zu viele Dateien enthält, ist dies eine Option.)

Edit - GitHub bietet tatsächlich den Zugriff über SVN an, mit dem Sie genau dies tun können (per Kommentar). Die neuesten Anweisungen dazu finden Sie unter https://github.com/blog/1438-improved-svn-here-to-stay-old-svn-going-away

15
michel-slm

Wenn Sie wirklich nur "download" den Ordner und nicht "klonen" it (für die Entwicklung) möchten, ist der einfachste Weg, einfach eine copy der neuesten Version des Repository (und daher ein Ordner/eine Datei darin), ohne das gesamte Repo klonen zu müssen oder gar git überhaupt zu installieren, ist das Herunterladen eines Zip-Archivs (für jedes Repo, Fork, Branch, Commit usw.), indem Sie gehen zu dem gewünschten Repository/Fork/Branch/Commit auf GitHub (z. B. http(s)://github.com/<user>/<repo>/commit/<Sha1> für eine Kopie der Dateien, wie sie nach einem bestimmten Commit waren) und klicken Sie auf die Schaltfläche Downloads oben rechts.

Dieses Archivformat enthält nichts von der git-repo-Magie, nur die verfolgten Dateien selbst (und möglicherweise einige .gitignore-Dateien, wenn sie verfolgt wurden, aber Sie können diese ignorieren: p) - das bedeutet, wenn sich der Code ändert und Sie dies möchten Bleiben Sie oben, Sie müssen es manuell erneut herunterladen, und es bedeutet auch, dass Sie es nicht als Git-Repository verwenden können ...

Nicht sicher, ob Sie in diesem Fall danach suchen (wieder "download"/view vs "clone"/weiterentwickeln), aber es kann trotzdem nützlich sein ...

13
johnny

Wer gerade an einem bestimmten Ordner arbeitet, muss diesen Ordner selbst klonen. Außerdem müssen Sie die folgenden Schritte ** befolgen, indem Sie SPARSE CHECKOUT verwenden.

Schritt 1: Erstellen Sie ein Verzeichnis.

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

Schritt 3: Aktivieren Sie spärliche Kassen. (git config core.sparsecheckout true)

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

Schritt 5: Hinzufügen der Fernbedienung (git remote add -f Origin https://jafartke.com/mkt-imdev/DVM.git)

Letzter Schritt 6: Abrufen der Dateien (git pull Origin master)

12
Mohammed Jafar

1.Klicken Sie auf diesen Link http://kinolien.github.io/gitzip/
2.Paste-Link des Github-Ordners, den Sie herunterladen möchten.
3. Klicken Sie auf Suchen, um alle Dateien zum Download anzuzeigen.
Hinweis: - Bei der Suche ist keine Eingabe des Token-Schlüssels erforderlich.

11
M Younus

Ein anderes konkretes Beispiel:

Ich möchte den Ordner "iOS Pro Geo" von der URL herunterladen

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 trunk im Pfad

Editiert: (gemäß dem 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

Editiert: Wenn Baum/Master nicht in URL vorhanden ist, dann Fork und dann in Forked URL. 

8
zeeawan

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 zu übernehmen (unter Verwendung der Rohdateiansicht).
  2. Lassen Sie Upstream-Projekte die erforderlichen Datenteilmengen als Build-Artefakte veröffentlichen.
  3. Geben Sie auf und nutzen Sie die vollständige Kasse. Es ist ein großer Hit beim ersten Build, aber wenn Sie nicht viel Verkehr bekommen, ist es in den folgenden Builds nicht zu viel Aufwand.
6

Um die obigen Antworten zu verdeutlichen, wäre ein reales Beispiel aus einem echten GitHub-Repository in einem lokalen 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.

4
John Washburn

Sie können den Verzeichnisbaum einfach herunterladen:

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

Aber wenn Sie vorhaben, es auszuprobieren und Commits ausführen und zurückschieben können, können Sie das nicht tun.

4
araqnid

Ich benutze Linux also, setze dies in ~/.bashrc, genannt even: D $ HOME/.bashrc

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

}

aktualisieren Sie dann die Shell mit 

source ~/.bashrc 

dann mit git-downloadfolder blablabla: D verwenden

4
user1088530

Es gibt ein Python3-Pip-Paket mit dem Namen 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.

4

Wenn Sie mit Unix-Befehlen vertraut sind, benötigen Sie hierfür keine besonderen Abhängigkeiten oder Web-Apps. Sie können das Repo als Tarball herunterladen und nur das herunterladen, was Sie brauchen.

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/Referenzen)
  • Behalten Sie den anfänglichen Teil des Pfads (*/) bei, um zu einem beliebigen Verzeichnis zu passen. Github erstellt ein Wrapper-Verzeichnis mit dem Commit-Ref im Namen, sodass es nicht bekannt ist.
  • Wahrscheinlich möchten Sie, dass --strip-components der Anzahl der Schrägstriche (/) im Pfad entspricht (vorheriges Argument).

Dadurch wird das gesamte Archiv heruntergeladen. Verwenden Sie die SVN-Methode, die in den anderen Antworten erwähnt wird, wenn dies vermieden werden muss oder Sie auf den GitHub-Servern nett sein möchten.

4
Albin

Ich arbeite mit CentOS 7-Servern, auf die ich keinen Root-Zugriff habe, noch git, svn usw. (oder möchte!). Deshalb habe ich ein Python-Skript zum Herunterladen eines beliebigen github-Ordners erstellt: https://github.com/andrrrl/github-ordner-downloader

Die Verwendung ist einfach. Kopieren Sie einfach den relevanten Teil aus einem Github-Projekt. Angenommen, das Projekt ist https://github.com/MaxCDN/php-maxcdn/ . Sie möchten einen Ordner, in dem sich nur Quelldateien befinden. dann musst du etwas tun wie: 

$ python gdownload.py "/MaxCDN/php-maxcdn/tree/master/src" /my/target/dir/
(erstellt Zielordner, falls nicht vorhanden) 

Es benötigt die Bibliothek lxml und kann mit easy_install lxml installiert werden.
Wenn Sie keinen Root-Zugriff haben (wie ich), können Sie eine .pydistutils.py-Datei mit folgendem Inhalt in Ihr $HOME-Verzeichnis erstellen: [install] user=1 Und easy_install lxml funktioniert einfach (ref: https: // stackoverflow.com/a/33464597/591257 ).

3
aesede

Keine der Antworten half in meiner Situation. Wenn Sie für Windows entwickeln, verfügen Sie wahrscheinlich nicht über svn. In vielen Situationen kann man sich 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, entwickelten Werkzeuge, um diese Aufgabe zu erfüllen. Wenn das Tool jedoch nicht für die von Ihnen verwendete Sprache geschrieben wurde oder Sie keine Drittanbieter-Bibliothek installieren möchten, funktionieren diese nicht.

Es gibt jedoch einen viel einfacheren Weg. GitHub verfügt über eine API, mit der Sie eine einzelne Datei oder den gesamten Inhalt eines Verzeichnisses herunterladen können mithilfe von GET-Anfragen . Sie können auf ein Verzeichnis mit https://api.github.com/repos/:owner/:repo_name/contents/:path zugreifen, das ein JSON-Objekt zurückgibt, das alle Dateien im Verzeichnis auflistet. In der Aufzählung ist ein Link zum rohen Inhalt der Datei enthalten, der download_url-Parameter. Die Datei kann dann mit dieser URL heruntergeladen werden.

Dies ist ein zweistufiger Prozess, für den GET-Anforderungen gestellt werden müssen. Dies kann jedoch in nahezu jeder Sprache und auf jeder Plattform implementiert werden. Es kann verwendet werden, um Dateien oder Verzeichnisse abzurufen.

2
Calvin

Unser Team hat dazu ein Bash-Skript geschrieben, da wir SVN nicht auf unserem Bare-Bones-Server installieren müssen.

https://github.com/ojbc/docker/blob/master/Java8-karaf3/files/git-download.sh

Es verwendet die github-API und kann wie folgt von der Befehlszeile aus ausgeführt werden:

git-download.sh https://api.github.com/repos/ojbc/main/contents/shared/ojb-certs
2
Yogesh Chawla

git clone --filter von 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 vor Ort getestet werden.

Ich habe dies ausführlicher behandelt unter: Wie klone ich ein Unterverzeichnis nur eines Git-Repositorys?

Ich habe dazu ein Tool mit Node.js geschrieben. Check it out Repo-Verzeichnis herunterladen

installation mit npm i -g dl-repo-dir und Befehl repo ist global verfügbar.

ein Verzeichnis in einem Repository herunterladen und umbenennen

repo download aztack/download-repo-dir lib src/lib/new-name

laden Sie ein Repository herunter

repo download aztack/download-repo-dir '' src/lib/download-repo-dir

download aus einem privaten Gitlab-Repository mit dem angegebenen Tag

export GITLAB_API_PRIVATE_TOKEN=YOUR_TOKEN_HERE

repo download gitlab:mygitlab.com:topgroup/subgroup/repo#v1.0.0 dir src/lib/new-name

und es wird eine repo.json-Datei zum Speichern aller Informationen geben.

In einem neuen Projekt können Sie das Projekt mit dem vorhandenen Code repo.json mit dem Befehl repo init initialisieren.

1
aztack

Wenn Sie es programmgesteuert machen müssen und sich nicht auf SVN verlassen möchten, können Sie die GitHub-API verwenden, um den gesamten Inhalt rekursiv herunterzuladen.

Zur Inspiration hier mein Ruby Gist: https://Gist.github.com/cvengros/b2a7e82f66519d423b6f

1
pcv

Um ein Verzeichnis aus GitHub zu exportieren, ersetzen Sie "/ tree/master /" in der Verzeichnis-URL durch "/ trunk /".

So exportieren Sie das Verzeichnis beispielsweise über die folgende URL:

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
1
Mohsen Abasi

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

function github-dir() {
    svn export "$(sed 's/tree\/master/trunk/' <<< "$1")" "$2"  
}
0
HappyFace

Wenn Sie Python und SVN zum Herunterladen eines bestimmten GitHub-Verzeichnisses verwenden möchten, ist hier der Code, den Sie verwenden würden:

import validators
from svn.remote import RemoteClient

def download_folder(url):
    if 'tree/master' in url:
        url = url.replace('tree/master', 'trunk')

    r = RemoteClient(url)
    r.export('output')


if __== '__main__':
    url = input('Enter folder URL: ')
    if not validators.url(url):
        print('Invalid url')
    else:
        download_folder(url)

Weitere Details zu diesem Code und anderen Such- und Download-Tipps für GitHub finden Sie in diesem Tutorial: https://python.gotrained.com/search-github-api/

0
GoTrained

Eine direkte Antwort auf diese Frage ist die erste Schildkröte svn über den folgenden Link.

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.

0
Khan