Na przykład chcę pobrać PCL 3d_rec_framework.
To jest repozytorium git PCL: https://github.com/PointCloudLibrary/pcl.git
Jak pobrać ten katalog?
https://github.com/PointCloudLibrary/pcl/tree/master/apps
Próbowałem uruchomić, ale nie działa:
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$
Jak go pobrać?
Nawiasem mówiąc, nie chcę pobierać git PCL i usuwać wszystkich innych katalogów, których nie chcę. Dlatego zadaję to pytanie.
Dziękuję ~
odpowiedź dobeya nie jest już prawdą od czasu git v1.7. Możesz teraz pobierać określone foldery z repozytorium. Pełne instrukcje można znaleźć tutaj .
To mówi git, które katalogi chcesz pobrać. Następnie możesz pobrać tylko te katalogi
źródło
Najpierw wykonaj:
Następnie:
... i na koniec:
To takie proste. Git przepisze repo, aby uwzględnić tylko pożądany katalog. Działa to nawet wtedy, gdy katalog częściowy ma kilka warstw głębokości. Po prostu nazwij katalog docelowy nazwą podkatalogu. Następnie w poleceniu „git filter-branch” podaj ścieżkę względną do podkatalogu. Aha,
--depth 1
każegit
tylko pobierać czubek głowy ( zasadniczo usuwając historię ).źródło
git clone --filter
z Git 2.19Ta opcja faktycznie pomija pobieranie większości niepotrzebnych obiektów z serwera:
Serwer powinien być skonfigurowany z:
Począwszy od wersji 2.19.0 nie ma obsługi serwera, ale można ją już przetestować lokalnie.
DO ZROBIENIA:
--filter=blob:none
pomija wszystkie obiekty BLOB, ale nadal pobiera wszystkie obiekty drzewa. Ale w normalnym repo powinno to być małe w porównaniu do samych plików, więc jest to już wystarczająco dobre. Zapytano pod adresem : https://www.spinics.net/lists/git/msg342006.html Devs odpowiedział, że--filter=tree:0
jest w przygotowaniu.Pamiętaj, że to
--depth 1
już sugeruje--single-branch
, patrz także: /programming/1778088/how-to-clone-a-single-branch-in-gitfile://$(path)
jest wymagany, aby pokonaćgit clone
protokół shenanigans: /programming/47307578/how-to-shallow-clone-a-local-git-repository-with-a-relative-pathFormat
--filter
jest udokumentowany naman git-rev-list
.Rozszerzono zdalny protokół Git w celu obsługi tej funkcji.
Dokumenty na drzewie Git:
Zobacz także: /programming/2466735/how-to-checkout-only-one-one-file-from-git-repository-sparse-checkout
Przetestuj to
GitHub w górę .
Dane wyjściowe w Git v2.19.0:
Wnioski:
d1/a
brakuje wszystkich obiektów blob z wyjątkiem . Na przykładf70a17f51b7b30fec48a32e4f19ac15e261fd1a4
, co jestd1/b
, nie jest tam po sprawdzeniud1/
.Zauważ, że
root/root
imybranch/mybranch
również ich brakuje, ale--depth 1
ukrywa to na liście brakujących plików. Jeśli usuniesz--depth 1
, zostaną one wyświetlone na liście brakujących plików.źródło
W przypadku repozytoriów GitHub można sklonować dowolne podkatalogi dowolnego repozytorium GitHub (pod dowolnym odniesieniem) przy użyciu https://github.com/HR/github-clone
źródło