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.
25 réponses
Mise À Jour De La Sep. 2016: il existe quelques outils créés par la communauté qui peuvent le faire pour vous:
-
DownGit (crédits à Minhas Kamal - upvote sa réponse juste ici! )
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.
-
obtenez l'URL de la pension . Tout d'abord, copiez L'URL du GitHub repo dans votre presse-papiers.
-
modifier l'URL pour subversion . Je veux télécharger le dossier à
/docs
de la branchemaster
, donc je vais ajoutertrunk/docs
. L'URL complète est maintenanthttps://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. -
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, utiliseztrunk
à la place. Donc le chemin complet esttrunk/foldername
- si vous êtes intéressé par
foo
branche, utilisezbranches/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.
deux options pour cette caractéristique:
Option 1: Extensions De Navigateur
Utilisation:
- sur n'importe quelle page de GitHub repos.
- il suffit de double cliquer sur les éléments dont vous avez besoin.
- cliquez sur le bouton Télécharger en bas à droite.
- voir le tableau de bord progress et attendre le téléchargement du déclencheur du navigateur.
- obtenir le fichier ZIP.
Obtenir Un Jeton:
- cliquez sur L'icône extension GitZip de votre navigateur.
- cliquez sur le lien" Normal "ou" privé "en plus du lien"Get Token".
- Autoriser GitZip permission sur la page d'auth de Github.
- retour à la page de repos du début.
- 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.
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 -
vous pouvez également configurer la propriété du fichier téléchargé - utilisation détaillée .
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
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:
- vous pouvez choisir les fichiers ou répertoires du dépôt git à archiver.
- il n'archive pas le dossier
.git/
, ni les fichiers non tracés du dépôt sur lequel il est lancé. - 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:
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.
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
- sur un Mac vous avez probablement déjà SVN (pour tester juste open terminal et tapez "svn" ou "qui svn" ~ sans les guillemets)
- 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
- copier le chemin à partir de la barre d'adresse du navigateur
- Ouvrir un Terminal et tapez: svn export
- l'adresse (par exemple.): https://github.com/mingsai/Sample-Code/tree/master/HeadsUpUI
- remplacer les mots: tree / master
- avec le mot: trunk
- 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)
- Ici l'espace est juste la barre d'Espace pas le mot (espace) ~ / téléchargements/HeadsUpUI
- 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.
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
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...
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)
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
)
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.
C'est l'un des rares endroits où SVN est meilleur que Git.
à la fin nous avons gravité vers trois options:
- utilisez wget pour saisir les données de GitHub (en utilisant la vue de fichier raw).
- demande aux projets en amont de publier le sous-ensemble de données requis sous forme d'artefacts de construction.
- 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.
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.
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.
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 ).
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
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
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
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
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.
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.
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.
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
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
.