Comment puis-je télécharger uniquement un dossier ou un répertoire spécifique à partir d'un référentiel Git distant hébergé sur GitHub?
Dites l'exemple du dépôt GitHub ici:
[email protected]:foobar/Test.git
Sa structure de répertoires:
Test/
├── foo/
│ ├── a.py
│ └── b.py
└── bar/
├── c.py
└── d.py
Je souhaite télécharger uniquement le dossier foo et ne pas cloner l'intégralité du projet Test.
Réponses:
Mise à jour sept. 2016: quelques outils créés par la communauté peuvent le faire pour vous:
Git ne le supporte pas, mais Github le fait via SVN. Si vous extrayez votre code avec subversion, Github convertira essentiellement le dépôt de git en subversion sur le backend, puis servira le répertoire demandé.
Voici comment vous pouvez utiliser cette fonction pour télécharger un dossier spécifique. Je vais utiliser la bibliothèque javascript populaire
lodash
comme exemple.Accédez au dossier que vous souhaitez télécharger . Téléchargeons
/test
depuis lamaster
branche.Modifiez l'URL de subversion . Remplacez
tree/master
partrunk
.https://github.com/lodash/lodash/tree/master/test
➜https://github.com/lodash/lodash/trunk/test
Téléchargez le dossier . Accédez à la ligne de commande et récupérez le dossier avec SVN.
Vous ne verrez peut-être aucune activité immédiatement, car Github prend jusqu'à 30 secondes pour convertir des référentiels plus importants, alors soyez patient.
C'est tout! Github prend également en charge davantage de fonctionnalités de subversion , y compris la prise en charge des modifications et des modifications.
la source
tree/master
partrunk
et vous pouvez obtenir le dossier spécifique.tree/master
partrunk
. Cette information doit être ajoutée en réponse.svn export
, car je ne voulais pas de copie de travail Subversion. Ensuite, j'ai ajouté le dossier résultant dans Git. (J'ai en quelque sorte perdu une grande partie de mon arborescence de répertoires, j'ai donc exporté à partir du dépôt que j'ai bifurqué.)branch
chemin versbranches
, ce que je pense est correct; sinon, allez-y et changez-le.Deux options pour cette fonctionnalité:
Option 1: extension de navigateur GitZip
Usage:
Obtenez un jeton:
Option 2: page gh de Github
Étape 1: Entrez l'url de github dans le champ en haut à droite.
Étape 2: Appuyez sur Entrée ou cliquez directement sur Télécharger pour télécharger le zip directement ou cliquez sur Rechercher pour afficher la liste des sous-dossiers et des fichiers.
Étape3: Cliquez sur "Télécharger le fichier Zip" ou "Obtenir le fichier" pour obtenir les fichiers.
Dans la plupart des cas, cela fonctionne correctement, sauf que le dossier contient plus de 1 000 fichiers, en raison de la limitation de l'API Github Trees. (fait référence au contenu de l'API Github # )
Et il peut également prendre en charge les dépôts privés / publics et mettre à niveau la limite de taux, si vous avez un compte GitHub et utilisez le lien "get token" sur ce site.
la source
Allez dans DownGit > Entrez votre URL> Télécharger!
Maintenant, vous pouvez TÉLÉCHARGER DIRECTEMENT ou créer un LIEN DE TÉLÉCHARGEMENT pour n'importe quel répertoire ou fichier public GitHub (fichier particulièrement volumineux ) à partir de DownGit ! Voici une démonstration simple-
Vous pouvez également configurer l' utilisation détaillée des propriétés du fichier téléchargé .
la source
downloaded 25 of 25 files
lorsque j'essaie de télécharger à partir de cette URL: github.com/dssg/hitchhikers-guide/tree/master/curriculum/…Si c'est le cas
svn
, vous pouvez utilisersvn export
pour cela:Remarquez le format URL:
https://github.com/
/trunk
annexé à la finAvant de vous lancer
svn export
, il est bon de vérifier d'abord le contenu du répertoire avec:la source
.git
extension. Vous pouvez utiliser le lien du projet complet et commencer par utilisersvn ls
suivi du chemin complet du projet. Exemple:svn ls https://github.com/RobTillaart/Arduino.git
. Pour exporter un seul dossier, il vous suffit d'ajouter le/trunk
suivi du chemin souhaité, commesvn export https://github.com/RobTillaart/Arduino.git/trunk/libraries/DHTlib
. Il est plus facile de conserver le chemin du projet intact.https://github.com/miguelgrinberg/python-socketio/tree/master/examples/wsgi
, exécutezsvn export https://github.com/miguelgrinberg/python-socketio.git/trunk/examples/wsgi
. Un répertoire appeléwsgi
sera créé sous le répertoire de travail actuel. Seuls les fichiers source, rien d'autre. Non.git
, pas de fichiers liés à la subversion.Pour un dépôt git générique:
Si vous souhaitez télécharger des fichiers, pas cloner le référentiel avec l'historique, vous pouvez le faire avec
git-archive
.git-archive
crée une archive compressée zip ou tar d'un référentiel git. Certaines choses qui le rendent spécial:.git/
n'archive pas le dossier ou les fichiers non suivis dans le référentiel sur lequel il est exécuté.Un exemple de création d'une archive du
docs/usage
répertoire à partir d'un référentiel distant auquel vous êtes connecté avec ssh:Plus d'informations dans cet article de blog et la documentation de git .
Remarque sur les dépôts GitHub:
GitHub ne permet pas l'
git-archive
accès . ☹️la source
git archive --format tar
le format n'est pas tar.gz, mais tar.J'ai créé un projet open source, appelé GitHubFolderDownloader . Il vous permet de télécharger un seul dossier d'un référentiel sans clonage ni téléchargement de l'ensemble du référentiel.
la source
Rien de mal avec les autres réponses mais je pensais juste partager des instructions étape par étape pour ceux qui se promènent dans ce processus pour la première fois.
Comment télécharger un seul dossier à partir d'un référentiel github (Mac OS X):
BTW - Si vous êtes sous Windows ou sur une autre plate-forme, vous pouvez trouver un téléchargement binaire de subversion (svn) sur http://subversion.apache.org
Mise à jour
Concernant le commentaire sur la reprise d'un téléchargement / paiement interrompu. J'essaierais de courir
svn cleanup
suivi desvn update
. Veuillez rechercher SO pour des options supplémentaires.la source
Quiconque travaille sur un dossier spécifique dont il a besoin pour cloner ce dossier particulier lui-même, pour ce faire, veuillez suivre les étapes ci-dessous en utilisant la vérification clairsemée.
Créez un répertoire.
Initialisez un référentiel Git. (
git init
)Activez les extractions clairsemées. (
git config core.sparsecheckout true
)Indiquez à Git les répertoires que vous souhaitez (echo 2015 / brand / May (reportez-vous au dossier sur lequel vous souhaitez travailler) >>
.git/info/sparse-checkout
)Ajoutez la télécommande (
git remote add -f origin https://jafartke.com/mkt-imdev/DVM.git
)Récupérer les fichiers (
git pull origin master
)la source
Vous ne pouvez pas; contrairement à Subversion, où chaque sous-répertoire peut être extrait individuellement, Git fonctionne sur la base d'un référentiel complet.
Pour les projets où un accès plus fin est nécessaire, vous pouvez utiliser des sous-modules - chaque sous-module est un projet Git distinct, et peut donc être cloné individuellement.
Il est concevable qu'un frontal Git (par exemple l'interface Web de GitHub, ou gitweb) puisse choisir de fournir une interface pour vous permettre d'extraire un dossier donné, mais à ma connaissance aucun ne le fait (bien qu'ils vous permettent de télécharger des fichiers individuels , donc si le dossier ne contient pas trop de fichiers, c'est une option)
Edit - GitHub offre en fait un accès via SVN, ce qui vous permettrait de faire exactement cela (selon le commentaire). Voir https://github.com/blog/1438-improved-svn-here-to-stay-old-svn-going-away pour les dernières instructions sur la façon de procéder
la source
Si vous voulez vraiment simplement "télécharger" le dossier et non le "cloner" (pour le développement), la manière la plus simple d'obtenir simplement une copie de la version la plus récente du référentiel (et donc un dossier / fichier qu'il contient), sans avoir besoin de cloner l'intégralité du référentiel ou même d'installer git en premier lieu, consiste à télécharger une archive zip (pour tout référentiel, fork, branche, commit, etc.) en allant dans le référentiel / fork / branch / commit souhaité sur GitHub (par exemple
http(s)://github.com/<user>/<repo>/commit/<Sha1>
pour une copie des fichiers tels qu'ils étaient après un commit spécifique) et en sélectionnant leDownloads
bouton en haut à droite.Ce format d'archive ne contient aucune magie de git-repo, juste les fichiers suivis eux-mêmes (et peut-être quelques fichiers .gitignore s'ils ont été suivis, mais vous pouvez les ignorer: p) - cela signifie que si le code change et que vous voulez restez au top, vous devrez le télécharger à nouveau manuellement, et cela signifie également que vous ne pourrez pas l'utiliser comme référentiel git ...
Je ne sais pas si c'est ce que vous recherchez dans ce cas (encore une fois, "télécharger" / afficher vs "cloner" / développer), mais cela peut néanmoins être utile ...
la source
tar.gz
:https://github.com/${owner}/${repo}/archive/${hash}.tar.gz
Résumé 2019
Il existe différentes manières de gérer cela, selon que vous souhaitez ou non effectuer cette opération manuellement ou par programme.
Il existe quatre options résumées ci-dessous. Et pour ceux qui préfèrent une explication plus pratique, j'ai mis en place une vidéo YouTube: Télécharger des fichiers et des dossiers individuels depuis GitHub .
De plus, j'ai publié une réponse similaire sur StackOverflow pour ceux qui ont besoin de télécharger des fichiers uniques depuis GitHub (par opposition aux dossiers).
1. Interface utilisateur GitHub
2. Outils tiers
https://github.com/babel/babel-eslint/tree/master/lib
) et appuyez sur le bouton "Télécharger".3. Subversion
svn export https://github.com/babel/babel-eslint/trunk/lib
et appuyez sur entrée.4. API GitHub
https://api.github.com/repos/:owner/:repo/contents/:path
. Après avoir remplacé les espaces réservés, un exemple de point de terminaison est:https://api.github.com/repos/babel/babel-eslint/contents/lib
. Cela vous donne des données JSON pour tout le contenu qui existe dans ce dossier. Les données ont tout ce dont vous avez besoin, y compris si le contenu est un dossier ou un fichier, une URL de téléchargement s'il s'agit d'un fichier et un point de terminaison API s'il s'agit d'un dossier (afin que vous puissiez obtenir les données pour ce dossier). À l'aide de ces données, le script peut parcourir récursivement tout le contenu du dossier cible, créer des dossiers pour les dossiers imbriqués et télécharger tous les fichiers de chaque dossier. Consultez le code de DownGit pour l'inspiration.la source
Un autre exemple spécifique:
Comme je veux télécharger le dossier 'iOS Pro Geo' depuis l'url
https://github.com/alokc83/APRESS-Books-Source-Code-/ tree / master /% 20Pro% 20iOS% 20Geo
et je peux le faire via
Remarque tronc dans le chemin
Modifié: (selon le commentaire de Tommie C)
Oui, l'utilisation de l' exportation au lieu de l' extraction donnerait une copie propre sans fichiers de dépôt git supplémentaires.
Modifié: si l'arbre / maître n'est pas là dans l'URL, bifurquez-le et il sera là dans l'URL fourchue.
la source
Il y a un paquet pip Python3 appelé
githubdl
qui peut faire cela *:La page du projet est ici
* Avertissement: j'ai écrit ce paquet.
la source
C'est l'un des rares endroits où SVN est meilleur que Git.
Au final, nous avons opté pour trois options:
la source
Si vous êtes à l'aise avec les commandes unix, vous n'avez pas besoin de dépendances spéciales ou d'applications Web pour cela. Vous pouvez télécharger le dépôt sous forme de tarball et décompresser uniquement ce dont vous avez besoin.
Exemple (fichiers woff2 d'un sous-répertoire dans fontawesome):
*/
) pour correspondre à n'importe quel répertoire. Github crée un répertoire wrapper avec la référence commit dans le nom, il ne peut donc pas être connu.--strip-components
être le même que la quantité de barres obliques (/
) dans le chemin (argument précédent).Cela téléchargera l'intégralité de l'archive tar. Utilisez la méthode SVN mentionnée dans les autres réponses si cela doit être évité ou si vous voulez être gentil avec les serveurs GitHub.
la source
Vous pouvez faire un simple téléchargement de l'arborescence des répertoires:
Mais si vous voulez vérifier cela et être capable de faire des commits et de les repousser, non, vous ne pouvez pas le faire.
la source
Juste pour amplifier les réponses ci-dessus, un exemple réel d'un vrai référentiel GitHub vers un répertoire local serait:
Parfois, un exemple concret permet de clarifier les substitutions proposées.
la source
Aucune des réponses n'a aidé dans ma situation. Si vous développez pour Windows, vous n'avez probablement pas svn. Dans de nombreuses situations, on ne peut pas non plus compter sur les utilisateurs pour installer Git, ou ne pas vouloir télécharger des référentiels entiers pour d'autres raisons. Certaines des personnes qui ont répondu à cette question, comme Willem van Ketwich et aztack, ont créé des outils pour accomplir cette tâche. Cependant, si l'outil n'est pas écrit pour la langue que vous utilisez ou si vous ne souhaitez pas installer une bibliothèque tierce, cela ne fonctionne pas.
Cependant, il existe un moyen beaucoup plus simple. GitHub dispose d'une API qui vous permet de télécharger un seul fichier ou le contenu d'un répertoire entier à l' aide de requêtes GET . Vous pouvez accéder à un répertoire à l'aide de
https://api.github.com/repos/:owner/:repo_name/contents/:path
qui renvoie un objet JSON énumérant tous les fichiers du répertoire. L'énumération comprend un lien vers le contenu brut du fichier, ledownload_url
paramètre. Le fichier peut ensuite être téléchargé à l'aide de cette URL.C'est un processus en deux étapes qui nécessite la possibilité de faire des requêtes GET, mais cela peut être implémenté dans à peu près n'importe quelle langue, sur n'importe quelle plate-forme. Il peut être utilisé pour obtenir des fichiers ou des répertoires.
la source
Notre équipe a écrit un script bash pour ce faire car nous ne voulions pas avoir à installer SVN sur notre serveur bare bones.
https://github.com/ojbc/docker/blob/master/java8-karaf3/files/git-download.sh
Il utilise l'API github et peut être exécuté à partir de la ligne de commande comme ceci:
la source
J'utilise Linux donc, mettez ça dans ~ / .bashrc, appelé even: D $ HOME / .bashrc
puis rafraîchissez le shell avec
puis utilisez-le avec git-downloadfolder blablabla: D
la source
Je travaille avec des serveurs CentOS 7 sur lesquels je n'ai pas d'accès root, ni git, svn, etc (ni envie!) Donc j'ai fait un script python pour télécharger n'importe quel dossier github: https://github.com/andrrrl/github -folder-downloader
L'utilisation est simple, copiez simplement la partie pertinente d'un projet github, disons que le projet est https://github.com/MaxCDN/php-maxcdn/ , et que vous voulez un dossier où ne sont que certains fichiers source, alors vous devez faire quelque chose comme:
$ python gdownload.py "/MaxCDN/php-maxcdn/tree/master/src" /my/target/dir/
(créera le dossier cible s'il n'existe pas)
Il nécessite une bibliothèque lxml , peut être installé avec
easy_install lxml
Si vous n'avez pas accès root (comme moi) vous pouvez créer un
.pydistutils.py
fichier dans votre répertoire$HOME
avec ces contenus:[install] user=1
Et çaeasy_install lxml
marchera (ref: https://stackoverflow.com/a/ 33464597/591257 ).la source
Plus que 5 étapes
la source
Pour exporter un répertoire depuis GitHub, remplacez "/ tree / master /" dans l'url du répertoire par "/ trunk /".
Par exemple, pour exporter le répertoire à partir de l'URL suivante:
exécutez la commande suivante:
la source
Une réponse simple à cela est de d'abord tortue svn à partir du lien suivant.
pendant l'installation, activez l'option CLI, afin qu'elle puisse être utilisée à partir de l'interface de ligne de commande.
copiez le lien du sous-répertoire git hub.
remplacer l'arbre / maître par le tronc
et fait
les fichiers seront téléchargés dans le dossier deeplab du répertoire actuel.
la source
vous pouvez utiliser git svn de la manière suivante.
De cette façon, vous n'avez pas à passer par la difficulté de définir svn, en particulier pour les utilisateurs de Windows.
la source
sudo apt install git-svn
est requis lors de l'exécution via WSL.Si vous devez le faire par programme et que vous ne voulez pas compter sur SVN, vous pouvez utiliser l'API GitHub pour télécharger récursivement tout le contenu.
Pour l'inspiration, voici mon essentiel rubis: https://gist.github.com/cvengros/b2a7e82f66519d423b6f
la source
Utilisez cette fonction, le premier argument est l'URL du dossier, le second est l'endroit où le dossier sera téléchargé:
la source
git clone --filter
de Git 2.19Cette option sautera en fait la récupération des objets inutiles du serveur:
Le serveur doit être configuré avec:
Une extension a été apportée au protocole distant Git pour prendre en charge cette fonctionnalité dans la v2.19.0, mais il n'y a pas de prise en charge de serveur pour le moment. Mais il peut déjà être testé localement.
J'ai couvert cela plus en détail à: Comment puis-je cloner un sous-répertoire uniquement d'un référentiel Git?
la source
Pour une raison quelconque, la
svn
solution ne fonctionne pas pour moi, et comme je n'ai besoin desvn
rien d'autre, cela n'avait pas de sens de passer du temps à essayer de le faire, alors j'ai cherché une solution simple en utilisant les outils que j'avais déjà. Ce script utilise uniquementcurl
etawk
pour télécharger tous les fichiers dans un répertoire GitHub décrit comme"/:user:repo/contents/:path"
.Le corps renvoyé d'un appel à la
"GET /repos/:user:repo/contents/:path"
commande API REST GitHub renvoie un objet qui inclut un"download_url"
lien pour chaque fichier d'un répertoire.Ce script de ligne de commande appelle cette API REST en utilisant
curl
et envoie le résultat via AWK, qui filtre toutes les lignes sauf "download_url", efface les guillemets et les virgules des liens, puis télécharge les liens à l'aide d'un autre appel à curl.la source
git sparse-checkout
Exemple avec la version actuelle :
Notamment
--sparse
extrait uniquement les fichiers degit
répertoire de niveau supérieur du référentiel dans la copie de travailgit sparse-checkout add t
ajoute / extrait progressivement let
sous-dossier degit
Autres éléments
git sparse-checkout init
fait quelques préparatifs pour activer les extractions partielles--filter=blob:none
optimise la récupération des données en téléchargeant uniquement les objets git nécessaires (jetez un œil à la fonction de clonage partiel pour plus d'informations)--cone
accélère également les performances en appliquant des modèles d'inclusion de fichiers plus restreintsStatut GitHub
la source