1483 votes

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

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

Disons que le repo GitHub de l'exemple se trouve ici :

git@github.com:foobar/Test.git

Sa structure de répertoires :

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

Je veux télécharger uniquement le foo et non pas cloner l'ensemble du projet Test.

8 votes

J'ai écrit un shell script pour cela en utilisant svn checkout - github.com/Decad/github-downloader

600 votes

Quelqu'un peut-il m'expliquer pourquoi il n'y a pas une solution "officielle" d'interface web pour cela ? Cela semble être une fonctionnalité triviale à mettre en œuvre, et pourtant super utile.

1 votes

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 avoir à cloner ou à télécharger l'ensemble du référentiel.

1379voto

nick Points 1140

Mise à jour avr. 2021 Il y a quelques outils créés par la communauté qui peuvent le faire pour vous :

Remarque : si vous essayez de télécharger un grand nombre de fichiers, vous devrez peut-être fournir un jeton à ces outils pour éviter la limitation du débit.


Approche originale (manuelle) : L'extraction d'un répertoire individuel n'est pas prise en charge par les services suivants git nativement, mais Github peut le faire via SVN. Si vous extrayez votre code avec subversion, Github convertira essentiellement le dépôt de git en subversion en arrière-plan, puis fournira le répertoire demandé.

Voici comment vous pouvez utiliser cette fonction pour télécharger un dossier spécifique. Je vais utiliser la populaire bibliothèque javascript lodash à titre d'exemple.

  1. Naviguez vers le dossier que vous voulez télécharger . Télécharger /test de master branche. github repo URL example

  2. Modifier l'URL pour subversion . Remplacer tree/master avec trunk .

    https://github.com/lodash/lodash/tree/master/test

    https://github.com/lodash/lodash/trunk/test

  3. Télécharger le dossier . Allez dans la ligne de commande et récupérez le dossier avec SVN.

    svn checkout https://github.com/lodash/lodash/trunk/test

Il se peut que vous ne voyiez pas d'activité immédiatement, car Github prend jusqu'à 30 secondes pour convertir les dépôts les plus importants, alors soyez patient.

Explication complète du format de l'URL :

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

C'est tout ! Github supporte plus de fonctionnalités de subversion ainsi que la prise en charge de la validation et du transfert des modifications.

14 votes

Je l'ai modifié pour utiliser svn export car je ne voulais pas d'une copie de travail de Subversion. Puis 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é depuis le repo que j'ai bifurqué).

0 votes

Existe-t-il une solution similaire si le dossier se trouve dans une branche ?

7 votes

@num3ric- Désolé pour la réponse tardive, mais vous devriez être en mesure de remplacer "trunk" par "branches/votrebranche".

180voto

janos Points 22603

Si vous avez svn vous pouvez utiliser svn export pour le faire :

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

Remarquez le format de l'URL :

  • L'URL de base est https://github.com/
  • /trunk ajouté à 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

0 votes

Cela fonctionne-t-il encore ? J'ai essayé avec TortiseSVN et j'obtiens une erreur de permission, me demandant de fournir des informations d'identification.

2 votes

@john Je suis sûr que c'est trop tard pour être d'une grande aide, mais avez-vous activé l'authentification à 2 facteurs sur votre compte GitHub ? Si oui, je pensez à J'ai lu quelque part que vous devrez utiliser une clé pré-générée pour le mot de passe (que vous devrez trouver dans les paramètres de GitHub).

1 votes

En ce qui concerne le formatage de l'URL, vous pouvez conserver l'option .git extension. Vous pouvez utiliser le lien complet du projet, et commencer par utiliser svn ls suivi du chemin complet du projet. Exemple : svn ls https://github.com/RobTillaart/Arduino.git . Pour exporter un seul dossier, il suffit d'ajouter la balise /trunk suivi du chemin souhaité, comme svn export https://github.com/RobTillaart/Arduino.git/trunk/libraries/D‌​HTlib . Il est plus facile de garder le chemin du projet intact.

82voto

RobW Points 2202

Pour un Repo git générique :

Si vous voulez télécharger des fichiers, et non cloner le dépôt avec l'historique, vous pouvez le faire avec git-archive .

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

  1. Vous pouvez choisir les fichiers ou les répertoires du dépôt git à archiver.
  2. Il n'archive pas le .git/ ou tout autre fichier non suivi dans le référentiel sur lequel il est exécuté.
  3. Vous pouvez archiver une branche, un tag ou un commit spécifique. Les projets gérés avec git utilisent souvent cette fonction pour générer des archives de versions du projet (beta, release, 2.0, etc.) que les utilisateurs peuvent télécharger.

Un exemple de création d'une archive de la docs/usage d'un dépôt distant auquel vous êtes connecté par ssh :

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

Plus d'informations dans cet article de blog et le documentation git .

Note sur les dépôts GitHub :

GitHub ne permet pas git-archive accès . ☹️

2 votes

git archive --format tar n'est pas tar.gz, mais tar.

0 votes

Ceci devrait être la meilleure réponse

2 votes

Je pense que c'est la meilleure réponse mais notez que la commande git archive ne fonctionne pas avec le protocole https.

24voto

michel-slm Points 2597

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 submodules. Chaque submodule 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 permettant d'extraire un dossier donné, mais à ma connaissance, aucun d'entre eux 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).

Editar - GitHub offre en fait un accès via SVN, ce qui vous permettrait de faire exactement cela (comme indiqué 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 manière de procéder

0 votes

Y a-t-il quelque chose via l'API de github ?

15voto

johnny Points 1055

Si vous voulez vraiment juste "télécharger" le dossier et non "clone" (pour le développement), le moyen le plus simple d'obtenir une copie de la version la plus récente du dépôt (et donc d'un dossier/fichier à l'intérieur), sans avoir besoin de cloner le dépôt entier ou même d'installer git en premier lieu, est de télécharger une archive zip (pour n'importe quel dépôt, fork, branche, commit, etc.) en allant sur le dépôt/fork/branche/commit désiré sur GitHub (par ex. http(s)://github.com/<user>/<repo>/commit/<Sha1> pour obtenir une copie des fichiers tels qu'ils étaient après une livraison spécifique) et en sélectionnant l'option Downloads en haut à droite.

Ce format d'archive ne contient pas la 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 rester au top, vous devrez le re-télécharger manuellement, et cela signifie aussi que vous ne pourrez pas l'utiliser comme dépôt git...

Je ne suis pas sûr que ce soit ce que vous recherchez dans ce cas (encore une fois, "télécharger"/voir vs "cloner"/développer), mais cela peut néanmoins être utile...

10 votes

Si vous ne voyez pas de lien de téléchargement, vérifiez que vous êtes sur la page principale du dépôt (et non sur un répertoire enfant). Il semble que vous ne puissiez télécharger qu'un zip de l'ensemble du dépôt. Aussi, cette page d'aide github pourrait être utile.

2 votes

Accès facile par pointer-cliquer. Facile d'obtenir une autorisation préalable. Facile d'extraire le dossier souhaité du zip téléchargé. Merci.

1 votes

L'URL générique pour obtenir le téléchargement dans tar.gz : https://github.com/${owner}/${repo}/archive/${hash}.tar.gz

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X