Загрузите одну папку или каталог из репозитория GitHub - PullRequest
881 голосов
/ 18 августа 2011

Как я могу загрузить только определенную папку или каталог с удаленного репозитория Git, размещенного на GitHub?

Скажем, пример репозитория GitHub живет здесь:

git@github.com:foobar/Test.git

Структура каталогов:

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

Я хочу загрузить только папку foo , а не клонировать весь тестовый проект.

Ответы [ 28 ]

13 голосов
/ 28 июля 2016

1.Нажмите на эту ссылку http://kinolien.github.io/gitzip/
2. Вставьте ссылку на папку Github, которую вы хотите загрузить.
3. Нажмите на поиск, он покажет все файлы для скачивания.
Примечание: -Используя поиск, нет необходимости вводить токен-ключ;) .. не усложняйте его (y)

9 голосов
/ 03 июня 2015

Другой конкретный пример:

Как я хочу скачать папку «iOS Pro Geo» с URL

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

и я могу сделать это через

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

Примечание Магистраль в пути

Отредактировано: (согласно комментарию Томми С.)

Да, использование export вместо checkout даст чистую копию без дополнительных файлов репозитория git.

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

Отредактировано: Если в url нет дерева / мастера, тогда разместите его, и оно будет там в разветвленном URL.

6 голосов
/ 24 января 2013

Это одно из немногих мест, где SVN лучше, чем Git.

В конце мы обратились к трем вариантам:

  1. Используйте wget для получения данных из GitHub(с использованием необработанного представления файлов).
  2. Пусть вышестоящие проекты опубликуют требуемое подмножество данных в качестве артефактов сборки.
  3. Откажитесь и используйте полную проверку.Это большой успех в первой сборке, но если вы не получаете много трафика, в следующих сборках это не слишком сложно.
6 голосов
/ 19 июня 2018

Существует пип-пакет Python3 с именем githubdl, который может сделать это *:

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

Страница проекта здесь

* Отказ от ответственности: я написал этот пакет.

5 голосов
/ 18 августа 2011

Вы можете сделать простую загрузку дерева каталогов:

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

Но если вы хотите проверить это и иметь возможность делать коммиты и толкать их назад, нет, вы не можете этого сделать.

5 голосов
/ 22 августа 2018

Если вы знакомы с командами Unix, вам не нужны специальные зависимости или веб-приложения для этого. Вы можете скачать репо в виде тарбола и распаковать только то, что вам нужно.

Пример (файлы woff2 из подкаталога в fontawesome):

curl -L https://api.github.com/repos/FortAwesome/Font-Awesome/tarball | tar xz --wildcards "*/web-fonts-with-css/webfonts/*.woff2" --strip-components=3
  • Подробнее о формате ссылки: https://developer.github.com/v3/repos/contents/#get-archive-link (включая способ получения zip-файла или отдельных веток / ссылок)
  • Сохранить начальную часть пути (*/) для соответствия любому каталогу. Github создает каталог-оболочку с именем ссылки на коммит, поэтому он не может быть известен.
  • Возможно, вы хотите, чтобы --strip-components было таким же, как количество слешей (/) в пути (предыдущий аргумент).

Это скачает весь тарбол. Используйте метод SVN, упомянутый в других ответах, если этого следует избегать или если вы хотите быть милым с серверами GitHub.

4 голосов
/ 15 января 2017

Я использую Linux, поэтому поместите это в ~ / .bashrc, который называется четным: D $ HOME / .bashrc

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

}

, затем обновите оболочку с помощью

source ~/.bashrc 

, затем используйтеэто с git-downloadfolder блаблабла: D

4 голосов
/ 12 декабря 2014

Просто чтобы усилить ответы выше, реальный пример из реального репозитория GitHub в локальный каталог будет:

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

Иногда конкретный пример помогает уточнить предложенные замены.

3 голосов
/ 10 октября 2016

Я работаю с серверами CentOS 7, на которых у меня нет доступа с правами root, ни с git, svn и т. Д. (И я не хочу!), Поэтому создал скрипт на python для загрузки любой папки github: https://github.com/andrrrl/github-folder-downloader

Использование простое, просто скопируйте соответствующую часть из проекта github, скажем, проект https://github.com/MaxCDN/php-maxcdn/,, и вы хотите папку, в которой есть только некоторые исходные файлы, тогда вам нужно сделать что-то вроде:

$ python gdownload.py "/MaxCDN/php-maxcdn/tree/master/src" /my/target/dir/
(создаст целевую папку, если она не существует)

Требуется библиотека lxml , может быть установлена ​​с easy_install lxml
Если вы неНе имея root-прав (как и я), вы можете создать файл .pydistutils.py в своем каталоге $HOME со следующим содержимым: [install] user=1 И easy_install lxml просто будет работать (ref: https://stackoverflow.com/a/33464597/591257).

3 голосов
/ 12 января 2016

Наша команда написала сценарий bash для этого, потому что мы не хотели устанавливать SVN на наш сервер.

https://github.com/ojbc/docker/blob/master/java8-karaf3/files/git-download.sh

Он использует API github и может быть запущен из командной строки следующим образом:

git-download.sh https://api.github.com/repos/ojbc/main/contents/shared/ojb-certs
...