Télécharger un seul dossier ou répertoire à partir D'un GitHub repo

Comment puis-je télécharger uniquement un dossier ou un répertoire spécifique à partir d'un repo git hébergé sur GitHub?

dit l'exemple GitHub repo vit ici:

git@github.com:foobar/Test.git

sa structure de répertoire:

Test/
    foo/ 
       a.py
       b.py
    bar/
       c.py
       d.py

je veux télécharger uniquement le dossier foo et ne pas cloner l'ensemble du projet de Test.

720
demandé sur random 2011-08-18 14:33:29

25 réponses

Mise À Jour De La Sep. 2016: il existe quelques outils créés par la communauté qui peuvent le faire pour vous:


Git ne supporte pas cela, mais Github le fait via SVN. Si vous vérifiez votre code avec subversion, Github convertira essentiellement le repo de git en subversion à l'arrière-plan, puis servira le répertoire demandé.

Voici comment vous pouvez utiliser cette fonctionnalité pour télécharger un dossier spécifique. Je vais utiliser le javascript populaire bibliothèque lodash comme un exemple.

  1. obtenez l'URL de la pension . Tout d'abord, copiez L'URL du GitHub repo dans votre presse-papiers. github repo URL example

  2. modifier l'URL pour subversion . Je veux télécharger le dossier à /docs de la branche master , donc je vais ajouter trunk/docs . L'URL complète est maintenant https://github.com/lodash/lodash/trunk/docs . Voir ma note ci-dessous pour une explication plus détaillée des raisons pour lesquelles nous devons utiliser ce format D'URL.

  3. Téléchargez le dossier . Allez à la ligne de commande et saisissez le dossier avec SVN. svn checkout https://github.com/lodash/lodash/trunk/docs

vous pourriez ne voir aucune activité immédiatement parce que Github prend jusqu'à 30 secondes pour convertir les dépôts plus grands, alors soyez patient.

Plein format de l'URL explication:

  • si vous êtes intéressé par master branche, utilisez trunk à la place. Donc le chemin complet est trunk/foldername
  • si vous êtes intéressé par foo branche, utilisez branches/foo à la place. Le le chemin complet ressemble à branches/foo/foldername
  • Protip: vous pouvez utiliser svn ls pour voir les étiquettes et les branches disponibles avant de télécharger si vous souhaite

C'est tout! Github supporte également d'autres fonctionnalités de subversion , y compris le support pour la propagation et la poussée des modifications.

683
répondu nick 2017-10-26 19:51:28

deux options pour cette caractéristique:

Option 1: Extensions De Navigateur

Chrome Extension , Firefox Addon

Utilisation:

  1. sur n'importe quelle page de GitHub repos.
  2. il suffit de double cliquer sur les éléments dont vous avez besoin.
  3. cliquez sur le bouton Télécharger en bas à droite.
  4. voir le tableau de bord progress et attendre le téléchargement du déclencheur du navigateur.
  5. obtenir le fichier ZIP.

Obtenir Un Jeton:

  1. cliquez sur L'icône extension GitZip de votre navigateur.
  2. cliquez sur le lien" Normal "ou" privé "en plus du lien"Get Token".
  3. Autoriser GitZip permission sur la page d'auth de Github.
  4. retour à la page de repos du début.
  5. Continue à utiliser.

Option 2: GitHub gh-page

http://kinolien.github.io/gitzip en utilisant L'API GitHub, et JSZip, FileSaver.les librairies js.

Step1: entrez l'url du github dans le champ en haut à droite.

Étape2: appuyez sur Entrée ou cliquez sur Télécharger pour télécharger zip directement ou cliquez recherche pour afficher la liste des sous-dossiers et fichiers.

Étape 3: Cliquez sur "Télécharger le fichier Zip" ou sur le bouton "Obtenir le fichier" pour obtenir les fichiers.

dans la plupart des cas, il fonctionne bien, sauf que le dossier contient plus de 1000 fichiers, en raison de la limitation de L'API Github Trees. (référence à Github API#Contenu )

et il peut également prendre en charge les pensions privées/publiques et de mettre à niveau la limite de taux, si vous avez compte GitHub et l'utilisation lien "get token" dans ce site.

370
répondu Kino 2018-01-22 06:31:01

allez à DownGit > entrez votre URL > télécharger!

Maintenant, vous pouvez directement télécharger ou créer lien de téléchargement pour n'importe quel répertoire ou fichier public GitHub ( fichier spécialement grand ) à partir de DownGit ! Voici une simple démonstration -


DownGit


vous pouvez également configurer la propriété du fichier téléchargé - utilisation détaillée .

305
répondu Minhas Kamal 2018-01-09 05:03:48

si vous avez svn , vous pouvez utiliser svn export pour faire ceci:

svn export https://github.com/foobar/Test.git/trunk/foo

Avis le format d'URL:

  • L'URL de base est https://github.com/
  • /trunk joint à la fin

avant d'exécuter svn export , il est bon de vérifier d'abord le contenu du répertoire avec:

svn ls https://github.com/foobar/Test.git/trunk/foo
138
répondu janos 2016-02-21 11:43:50

pour un git Repo Générique:

si vous voulez télécharger des fichiers, ne pas cloner le dépôt avec l'historique, vous pouvez le faire avec git-archive .

git-archive crée une archive compressée zip ou tar d'un dépôt git. Certaines choses qui le rendent spécial:

  1. vous pouvez choisir les fichiers ou répertoires du dépôt git à archiver.
  2. il n'archive pas le dossier .git/ , ni les fichiers non tracés du dépôt sur lequel il est lancé.
  3. vous pouvez archiver une branche, une étiquette ou une propagation spécifique. Les projets gérés avec git l'utilisent souvent pour générer des archives de versions du projet (bêta, version, 2.0, etc. pour les utilisateurs à télécharger.

exemple de création d'une archive du répertoire docs/usage à partir d'un repo distant connecté à avec SSH:

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

Plus d'informations dans ce blog et le git documentation .

Note sur les Repos GitHub:

GitHub n'autorise pas git-archive accès . ☹️

57
répondu RobW 2017-04-18 16:50:54

j'ai créé un projet open source, appelé Githubfoldownloader . Il vous permet de télécharger un seul dossier d'un dépôt sans cloner ou télécharger l'ensemble du dépôt.

34
répondu VahidN 2015-06-17 10:16:16

rien de mal avec les autres réponses, mais j'ai juste pensé que je partagerais des instructions étape par étape pour ceux qui errent à travers ce processus pour la première fois.

comment télécharger un seul dossier depuis un dépôt Github (Mac OS X):

~ Pour ouvrir le Terminal, cliquez simplement spotlight et le type de terminal, puis appuyez sur entrée

  1. sur un Mac vous avez probablement déjà SVN (pour tester juste open terminal et tapez "svn" ou "qui svn" ~ sans les guillemets)
  2. sur Github: localisez le chemin Github vers votre dossier git (pas le repo) en cliquant sur le nom du dossier spécifique dans un repo
  3. copier le chemin à partir de la barre d'adresse du navigateur
  4. Ouvrir un Terminal et tapez: svn export
  5. l'adresse (par exemple.): https://github.com/mingsai/Sample-Code/tree/master/HeadsUpUI
  6. remplacer les mots: tree / master
  7. avec le mot: trunk
  8. tapez dans le dossier de destination pour les fichiers (dans cet exemple, I stocker le dossier cible à l'intérieur du dossier de Téléchargements pour le l'utilisateur actuel)
  9. Ici l'espace est juste la barre d'Espace pas le mot (espace) ~ / téléchargements/HeadsUpUI
  10. la commande finale du terminal affiche la commande complète pour télécharger dossier (comparer l'adresse à l'étape 5) svn export https://github.com/mingsai/Sample-Code/trunk/HeadsUpUI ~ / Downloads/HeadsUpUI

BTW - si vous êtes sur Windows ou une autre plate-forme, vous pouvez trouver un binaire téléchargement de subversion (svn) à http://subversion.apache.org

~ si vous voulez vérifier le dossier plutôt que simplement le télécharger, essayez d'utiliser l'aide svn (tldr: remplacer export par checkout )

mise à Jour

concernant le commentaire sur la reprise d'un téléchargement/checkout interrompu. Je voudrais essayer svn cleanup suivi de svn update . S'il vous plaît Rechercher SO pour des options supplémentaires.

23
répondu Tommie C. 2018-04-09 16:48:29

vous ne pouvez pas; contrairement à Subversion, où chaque sous-répertoire peut être vérifié individuellement, Git fonctionne sur la base d'un dépôt 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 séparé, et peut donc être cloné individuellement.

il est concevable qu'un front-end Git (par exemple l'interface web de GitHub, ou gitweb) puisse choisir de fournir une interface pour vous d'extraire un donné dossier, mais à ma connaissance aucun d'eux ne le font (bien qu'ils ne vous permettent de télécharger des fichiers individuels, donc si le dossier ne contient pas trop de fichiers, qui est une option)

Edit - GitHub offre en fait L'accès via SVN, ce qui vous permettrait de faire exactement cela (comme dans 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 faire cela

15
répondu michel-slm 2013-12-19 07:20:58

si vous voulez vraiment juste "télécharger" le dossier et non "clone" it (pour le développement), la façon la plus facile d'obtenir simplement une copie de la version la plus récente du dépôt (et donc un dossier/fichier à l'intérieur de celui-ci), sans avoir besoin de cloner l'ensemble du repo ou même installer git en premier lieu, est de télécharger une archive zip (Pour tout repo, fourchette, branche, commit, etc.) en passant par le souhaité dépôt / fork/branch / commit sur GitHub (par exemple http(s)://github.com/<user>/<repo>/commit/<Sha1> pour une copie des fichiers tels qu'ils étaient après une propagation spécifique) et en sélectionnant le bouton Downloads en haut à droite.

ce format d'archive ne contient aucun de la magie git-repo, juste les fichiers tracés eux-mêmes (et peut-être quelques-uns .les fichiers gitignore s'ils ont été suivis, mais vous pouvez les ignorer :p) - cela signifie que si le code change et que vous voulez rester au top, vous devrez le télécharger à nouveau manuellement, et cela signifie également que vous ne pourrez pas l'utiliser comme un dépôt git...

pas sûr si c'est ce que vous recherchez dans ce cas (encore une fois,"Télécharger "/Voir vs"clone" /développer), mais il peut être utile néanmoins...

12
répondu johnny 2011-08-18 14:02:46

1.Cliquez sur le lien http://kinolien.github.io/gitzip/

2.Coller le lien du dossier Github que vous voulez télécharger.

3.Cliquez sur Rechercher pour voir tous les fichiers à télécharger.

Remarque:-l'Utilisation de la recherche il n'est pas nécessaire d'entrer jeton de clé ;)..keep it simple (y)

11
répondu M Younus 2016-07-28 17:53:46

qui que ce soit qui travaille sur un dossier spécifique dont il a besoin pour cloner ce dossier particulier lui-même , alors s'il vous plaît suivez les étapes ci-dessous * * - - en utilisant SPARSE CHECKOUT - - * * *

Étape 1: Créez un répertoire.

Étape 2: initialiser un dépôt Git. ( git init )

Etape 3: Activer Les Vérifications Éparses. ( git config core.sparsecheckout true )

Étape 4: dites à Git quels répertoires vous voulez (echo 2015 / brand / May) (référez-vous au dossier vous souhaitez travailler sur) >> .git/info/sparse-checkout )

Étape 5: ajouter la télécommande ( git remote add -f origin https://jafartke.com/mkt-imdev/DVM.git )

étape finale 6: récupérez les fichiers ( git pull origin master )

11
répondu Mohammed Jafar 2017-10-24 10:26:32

autre exemple spécifique:

comme je veux télécharger le dossier "iOS Pro Geo" à partir de l'url

https://github.com/alokc83/APRESS-Books-Source-Code - / tree / master / %20Pro%20iOS%20Geo

et je peux le faire via

svn checkout https://github.com/alokc83/APRESS-Books-Source-Code-/trunk/%20Pro%20iOS%20Geo

Note tronc dans le chemin

Édité: (comme par Tommie C comment)

Oui, à l'aide de exporter au lieu de checkout donnerait une copie propre, sans dépôt git de fichiers.

svn export https://github.com/alokc83/APRESS-Books-Source-Code-/trunk/%20Pro%20iOS%20Geo

Édité: Si l'arbre/maître n'est pas là dans l'url, puis à la Fourche et il sera là dans la Fourche de l'url.

7
répondu zeeawan 2016-07-05 21:20:56

C'est l'un des rares endroits où SVN est meilleur que Git.

à la fin nous avons gravité vers trois options:

  1. utilisez wget pour saisir les données de GitHub (en utilisant la vue de fichier raw).
  2. demande aux projets en amont de publier le sous-ensemble de données requis sous forme d'artefacts de construction.
  3. abandonnez et utilisez la caisse complète. C'est un grand succès sur la première construction, mais à moins que vous obtenez beaucoup de trafic, ce n'est pas trop trop de tracas dans les versions suivantes.
6
répondu Manish Shrivastava 2018-01-24 08:32:55

juste pour amplifier les réponses ci-dessus, un exemple réel d'un véritable dépôt GitHub vers un répertoire local serait:

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

Parfois, un exemple concret permet de clarifier les substitutions proposées.

4
répondu John Washburn 2014-12-11 21:59:51

Vous pouvez faire un simple téléchargement de l'arborescence du répertoire:

git archive --remote git@github.com:foobar/Test.git HEAD:foo | tar xf -

mais si vous voulez vérifier, et être capable de faire des commits et les repousser, Non vous ne pouvez pas faire cela.

3
répondu araqnid 2011-08-18 11:19:20

je travaille avec des serveurs CentOS 7 sur lesquels je n'ai pas d'accès root, ni git, svn, etc (ni veux!) ainsi créé un script python pour télécharger n'importe quel dossier github: https://github.com/andrrrl/github-folder-downloader

L'Usage est simple, il suffit de copier la partie pertinente d'un projet github, disons que le projet est https://github.com/MaxCDN/php-maxcdn / , et vous voulez un dossier où certains fichiers source sont seulement, alors vous besoin de faire quelque chose comme:

$ python gdownload.py "/MaxCDN/php-maxcdn/tree/master/src" /my/target/dir/

(créer le dossier cible n'existe pas)

il nécessite lxml bibliothèque, peut être installé avec easy_install lxml

Si vous n'avez pas d'accès root (comme moi), vous pouvez créer un fichier .pydistutils.py dans votre répertoire $HOME avec ce contenu.: [install] user=1 Et easy_install lxml ne fera que fonctionner (réf: https://stackoverflow.com/a/33464597/591257 ).

3
répondu aesede 2017-05-23 12:18:30

notre équipe a écrit un script bash pour le faire parce que 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é depuis la ligne de commande comme suit:

git-download.sh https://api.github.com/repos/ojbc/main/contents/shared/ojb-certs
2
répondu Yogesh Chawla 2016-01-11 23:14:57

j'utilise linux donc , mettez ceci dans ~/.bashrc, appelé even: d $HOME/.bashrc

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

}

puis rafraîchir le réservoir avec

source ~/.bashrc 

puis l'utiliser avec git-downloadfolder blablabla: d

2
répondu user1088530 2017-01-15 15:54:56

si vous avez besoin de le faire programmatiquement et que vous ne voulez pas vous fier à SVN, vous pouvez utiliser L'API GitHub pour télécharger tout le contenu de manière récursive.

pour l'inspiration, voici mon ruby gist: https://gist.github.com/cvengros/b2a7e82f66519d423b6f

1
répondu pcv 2014-11-15 01:37:13

pour exporter un répertoire de GitHub, remplacer" /tree/master/ "dans l'url du répertoire par"/trunk/".

par exemple, pour exporter le répertoire à partir de L'URL suivante:

https://github.com/liferay/liferay-plugins/tree/master/portlets/sample-hibernate-portlet

exécuter la commande suivante:

svn export https://github.com/liferay/liferay-plugins/trunk/portlets/sample-hibernate-portlet
1
répondu Mohsen Abasi 2015-09-23 20:43:42

il y a un paquet Pip Python3 appelé githubdl qui peut faire ceci*:

export GIT_TOKEN=1234567890123456789012345678901234567890123
pip install githubdl
githubdl -u http://github.com/foobar/test -d foo

* Avertissement: j'ai écrit ce package.

1
répondu Willem van Ketwich 2018-06-19 10:47:06

aucune des réponses n'a aidé dans ma situation. Si vous développez Pour Windows, vous n'avez probablement pas svn. Dans de nombreux cas, on ne peut pas compter sur les utilisateurs pour installer Git, ou ne pas vouloir télécharger des dépôts entiers pour d'autres raisons. Certaines des personnes qui ont répondu à cette question, comme Willem van Ketwich et aztack, des outils pour accomplir cette tâche. Toutefois, si l'outil n'est pas écrit pour la langue que vous utilisez, ou si vous ne voulez pas installer un tiers bibliothèque, ce n'est pas le travail.

cependant, il y a un moyen beaucoup plus facile. GitHub dispose d'une API qui vous permet de télécharger un seul fichier ou le contenu d'un répertoire entier en utilisant les requêtes GET . Vous pouvez accéder à un répertoire en utilisant 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 inclut un lien vers le contenu brut du fichier, le paramètre download_url . Le fichier peut ensuite être téléchargé en utilisant cette URL.

c'est un processus en deux étapes qui nécessite la capacité 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 récupérer des fichiers ou des répertoires.

1
répondu Calvin 2018-07-12 23:29:23

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 rapport en tant que tarball et untar seulement ce que vous avez besoin.

exemple (fichiers woff2 d'un sous-répertoire dans fontawesome):

curl -L https://api.github.com/repos/FortAwesome/Font-Awesome/tarball | tar xz --wildcards "*/web-fonts-with-css/webfonts/*.woff2" --strip-components=3
  • en savoir plus sur le format de lien: https://developer.github.com/v3/repos/contents/#get-archive-link (y compris comment obtenir un fichier zip ou spécifique branches / réfs)
  • conserve la partie initiale du chemin ( */ ) pour correspondre à n'importe quel répertoire. Github crée un répertoire wrapper avec l'arbitre de propagation dans le nom, donc il ne peut pas être connu.
  • vous voulez probablement que --strip-components soit la même que la quantité de slashes ( / ) dans le chemin (argument précédent).

ceci va télécharger l'intégralité de l'archive. Utilisez la méthode SVN mentionnée dans les autres réponses si cela doit être évités ou si vous voulez être gentil avec les GitHub serveurs.

1
répondu Albin 2018-08-22 07:46:08

si le directoy que vous voulez télécharger est une bibliothèque séparée, il est préférable de créer un autre git repo, puis d'utiliser la fonction submodule git.

bien sûr, vous devez être le propriétaire de la première pensions que vous voulez

0
répondu Asenar 2013-01-24 09:29:25

j'ai écrit un outil avec noeud.js juste pour cela. Vérifier les télécharger Repo Dir

installer npm i -g dl-repo-dir et la commande repo sera disponible dans le monde entier.

télécharger et renommer un répertoire dans un dépôt

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

téléchargement d'un référentiel

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

télécharger à partir d'un gitlab privé dépôt avec l'étiquette

export GITLAB_API_PRIVATE_TOKEN=YOUR_TOKEN_HERE

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

et il y aura un fichier repo.json pour sauvegarder toute l'information.

dans un nouveau projet, vous pouvez initialiser le projet avec existe repo.json en utilisant la commande repo init .

0
répondu aztack 2018-07-11 07:33:19