Par exemple, je souhaite télécharger PCL 3d_rec_framework.
Ceci est le référentiel git de PCL: https://github.com/PointCloudLibrary/pcl.git
Comment télécharger ce répertoire?
https://github.com/PointCloudLibrary/pcl/tree/master/apps
J'ai essayé de courir mais ne fonctionne pas:
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$
Comment le télécharger?
Au fait, je ne veux pas télécharger git de PCL et supprimer tous les autres répertoires dont je ne veux pas. C'est pourquoi je pose cette question.
Merci ~
la réponse de dobey n'est plus le cas depuis git v1.7. Vous pouvez désormais extraire certains dossiers d'un référentiel. Les instructions complètes se trouvent ici .
Cela indique à git quels répertoires vous souhaitez extraire. Ensuite, vous pouvez extraire uniquement ces répertoires
la source
Tout d'abord, faites:
Ensuite:
...Et enfin:
C'est si facile. Git réécrira le dépôt afin que seul le sous-répertoire souhaité soit inclus. Cela fonctionne même si le sous-répertoire a plusieurs couches de profondeur. Nommez simplement le répertoire de destination le nom du sous-répertoire. Ensuite, dans la commande "git filter-branch", mettez le chemin relatif vers le sous-répertoire. Oh, le
--depth 1
ditgit
de ne télécharger que le haut de la tête (en supprimant essentiellement l'historique ).la source
git clone --filter
de Git 2.19Cette option sautera en fait la récupération de la plupart des objets inutiles du serveur:
Le serveur doit être configuré avec:
Il n'y a pas de support serveur à partir de la v2.19.0, mais il peut déjà être testé localement.
TODO:
--filter=blob:none
ignore tous les blobs, mais récupère toujours tous les objets d'arbre. Mais sur un dépôt normal, cela devrait être minuscule par rapport aux fichiers eux-mêmes, donc c'est déjà assez bon. Demandé à: https://www.spinics.net/lists/git/msg342006.html Devs a répondu qu'un--filter=tree:0
était en train de le faire.N'oubliez pas que cela
--depth 1
implique déjà--single-branch
, voir aussi: /programming/1778088/how-to-clone-a-single-branch-in-gitfile://$(path)
est nécessaire pour surmontergit clone
les manigances du protocole: /programming/47307578/how-to-shallow-clone-a-local-git-repository-with-a-relative-pathLe format de
--filter
est documenté surman git-rev-list
.Une extension a été apportée au protocole distant Git pour prendre en charge cette fonctionnalité.
Documents sur l'arbre Git:
Voir également: /programming/2466735/how-to-checkout-only-one-file-from-git-repository-sparse-checkout
Testez-le
GitHub en amont .
Sortie dans Git v2.19.0:
Conclusions: tous les blobs sauf
d1/a
sont manquants. Par exemplef70a17f51b7b30fec48a32e4f19ac15e261fd1a4
, ce qui n'estd1/b
pas le cas après le paiementd1/
.Notez que
root/root
etmybranch/mybranch
sont également manquants, mais les--depth 1
masquent dans la liste des fichiers manquants. Si vous supprimez--depth 1
, ils apparaissent sur la liste des fichiers manquants.la source
Pour les référentiels GitHub, vous pouvez cloner tous les sous-répertoires de tout référentiel GitHub (à n'importe quelle référence) en utilisant https://github.com/HR/github-clone
la source