Zum Beispiel möchte ich PCL 3d_rec_framework herunterladen.
Dies ist das Git-Repository von PCL: https://github.com/PointCloudLibrary/pcl.git
Wie kann ich dieses Verzeichnis herunterladen?
https://github.com/PointCloudLibrary/pcl/tree/master/apps
Ich habe versucht zu rennen, aber es funktioniert nicht:
sam@sam:~/code/pcl_standalone$ git clone https://github.com/PointCloudLibrary/pcl/tree/master/apps/3d_rec_framework
Cloning into '3d_rec_framework'...
error: The requested URL returned error: 403 while accessing https://github.com/PointCloudLibrary/pcl/tree/master/apps/3d_rec_framework/info/refs
fatal: HTTP request failed
sam@sam:~/code/pcl_standalone$
Wie kann ich es herunterladen?
Übrigens möchte ich nicht git von PCL herunterladen und alle anderen Verzeichnisse entfernen, die ich nicht möchte. Deshalb stelle ich diese Frage.
Vielen Dank ~
Dobeys Antwort ist seit git v1.7 nicht mehr der Fall. Sie können jetzt bestimmte Ordner aus einem Repository auschecken. Die vollständige Anleitung finden Sie hier .
Dies teilt git mit, welche Verzeichnisse Sie auschecken möchten. Dann können Sie nur diese Verzeichnisse ziehen
quelle
Zuerst machen Sie:
Dann:
...Und zuletzt:
So einfach ist das. Git schreibt das Repo neu, sodass nur das gewünschte Unterverzeichnis enthalten ist. Dies funktioniert auch dann, wenn das Unterverzeichnis mehrere Ebenen tief ist. Benennen Sie das Zielverzeichnis einfach mit dem Namen des Unterverzeichnisses. Geben Sie dann im Befehl "git filter-branch" den relativen Pfad zum Unterverzeichnis ein. Oh, das
--depth 1
sagtgit
, nur die Oberseite des Kopfes herunterzuladen (im Wesentlichen die Geschichte zu entfernen ).quelle
git clone --filter
von Git 2.19Diese Option überspringt das Abrufen der meisten nicht benötigten Objekte vom Server:
Der Server sollte konfiguriert sein mit:
Ab v2.19.0 gibt es keine Serverunterstützung, diese kann jedoch bereits lokal getestet werden.
TODO:
--filter=blob:none
Überspringt alle Blobs, ruft aber trotzdem alle Baumobjekte ab. Bei einem normalen Repo sollte dies jedoch im Vergleich zu den Dateien selbst winzig sein, sodass dies bereits gut genug ist. Gefragt unter: https://www.spinics.net/lists/git/msg342006.html Die Entwickler haben geantwortet--filter=tree:0
, dass dies in Vorbereitung ist.Beachten Sie, dass dies
--depth 1
bereits impliziert--single-branch
, siehe auch: /programming/1778088/how-to-clone-a-single-branch-in-gitfile://$(path)
ist erforderlich, umgit clone
Protokoll-Probleme zu überwinden : /programming/47307578/how-to-shallow-clone-a-local-git-repository-with-a-relative-pathDas Format von
--filter
ist am dokumentiertman git-rev-list
.Das Git-Remote-Protokoll wurde erweitert, um diese Funktion zu unterstützen.
Dokumente zum Git-Tree:
Siehe auch: /programming/2466735/how-to-checkout-only-one-file-from-git-repository-sparse-checkout
Probieren Sie es aus
GitHub Upstream .
Ausgabe in Git v2.19.0:
Schlussfolgerungen: Alle Kleckse außer
d1/a
fehlen. ZBf70a17f51b7b30fec48a32e4f19ac15e261fd1a4
was istd1/b
, ist nach dem Auschecken nicht dad1/
.Beachten Sie, dass
root/root
undmybranch/mybranch
auch fehlen, aber--depth 1
verbirgt das aus der Liste der fehlenden Dateien. Wenn Sie entfernen--depth 1
, werden sie in der Liste der fehlenden Dateien angezeigt.quelle
Bei GitHub-Repos können Sie beliebige Unterverzeichnisse eines beliebigen GitHub-Repositorys (mit einer beliebigen Referenz) mithilfe von https://github.com/HR/github-clone klonen
quelle