Загрузите одну папку или каталог из репозитория 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 ]

822 голосов
/ 12 августа 2013

Обновление сентябрь 2016: сообщество разработало несколько инструментов, которые могут сделать это для вас:


Git не поддерживает это, но Github поддерживает SVN. Если вы извлекаете свой код с помощью Subversion, Github по существу преобразует репозиторий из Git в Subversion в серверной части, а затем обслуживает запрошенный каталог.

Вот как вы можете использовать эту функцию для загрузки определенной папки. В качестве примера я буду использовать популярную библиотеку JavaScript lodash.

  1. Получить URL репо . Сначала скопируйте URL-адрес репозитория Github в буфер обмена. github repo URL example

  2. Изменить URL для Subversion . Я хочу загрузить папку в /docs из ветки master, поэтому я добавлю trunk/docs. Полный URL теперь https://github.com/lodash/lodash/trunk/docs. См. Мое примечание ниже для более подробного объяснения того, почему мы должны использовать этот формат URL.

  3. Скачать папку . Перейдите в командную строку и возьмите папку с SVN. svn checkout https://github.com/lodash/lodash/trunk/docs

Вы можете не видеть никаких действий сразу, потому что Github занимает до 30 секунд, чтобы конвертировать большие репозитории, так что наберитесь терпения.

Полное объяснение формата URL:

  • Если вас интересует ветка master, используйте trunk. Таким образом, полный путь trunk/foldername
  • Если вас интересует ветка foo, используйте branches/foo. полный путь выглядит как branches/foo/foldername
  • Подсказка: вы можете использовать svn ls, чтобы просмотреть доступные теги и ветви перед загрузкой, если хотите

Вот и все! Github также поддерживает больше возможностей Subversion , включая поддержку фиксации и отправки изменений.

461 голосов
/ 17 ноября 2015

Два варианта этой функции:

Вариант 1: Расширения браузера

Расширение Chrome , Аддон Firefox

Использование:

  1. На любой странице репозитория GitHub.
  2. Просто дважды щелкните по пустой части нужных вам элементов.
  3. Нажмите кнопку загрузки в правом нижнем углу.
  4. Просмотрите панель прогресса и дождитесь загрузки триггера браузера.
  5. Получить ZIP-файл.

Получить токен:

  1. Щелкните значок расширения GitZip в браузере.
  2. Нажмите «Обычный»или «Частная» ссылка, кроме «Получить токен».
  3. Авторизовать разрешение GitZip на странице авторизации Github.
  4. Вернуться на начальную страницу репо.
  5. Продолжать использовать.

Вариант 2: Github gh-page

http://kinolien.github.io/gitzip с использованием API GitHub и библиотек JSZip, FileSaver.js.

Шаг 1: введите URL-адрес github в поле в правом верхнем углу.
Шаг 2: нажмите клавишу ввода или щелкните «Загрузить» для загрузки непосредственно из zip-файла или нажмите «Поиск» для просмотра списка подпапок и файлов.
Шаг 3: Нажмите кнопку «Загрузить файл Zip» или «Получить файл», чтобы получить файлы.

В большинстве случаев работает нормально, за исключением того, чтоВ этой папке содержится более 1000 файлов из-за ограничений Github Trees API.(относится к Github API # Contents )

И он также может поддерживать частные / публичные репозитории и обновлять ограничение скорости, если у вас есть учетная запись GitHub и используется ссылка «получить токен» на этом сайте,

420 голосов
/ 10 августа 2016

Перейти к DownGit > Введите ваш URL> Загрузить!

Теперь вы можете ПРЯМО СКАЧАТЬ или создать СКАЧАТЬ ССЫЛКУ для любого общедоступного каталога или файла GitHub ( особенно большой файл ) из DownGit !Вот простая демонстрация -


DownGit


Вы также можете настроить свойство загруженного файла - подробное использование .

153 голосов
/ 20 августа 2013

Если у вас есть svn, вы можете использовать svn export для этого:

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

Обратите внимание на формат URL:

  • Базовый URL-адрес https://github.com/
  • /trunk, добавляемый в конце

Перед запуском svn export рекомендуется сначала проверить содержимое каталога с помощью:

svn ls https://github.com/foobar/Test.git/trunk/foo
63 голосов
/ 13 апреля 2013

Для универсального репозитория git:

Если вы хотите загружать файлы, а не клонировать репозиторий с историей, вы можете сделать это с помощью git-archive.

git-archive создает сжатый zip или tar-архив из git-репозитория.Некоторые вещи, которые делают его особенным:

  1. Вы можете выбрать, какие файлы или каталоги в репозитории git архивировать.
  2. Он не архивирует .git/ папку или любые неотслеживаемые файлы в хранилище, в котором он запущен.
  3. Вы можете заархивировать определенную ветку, тег или коммит.Проекты, управляемые с помощью git, часто используют это для генерации архивов версий проекта (бета, выпуск, 2.0 и т. Д.) Для загрузки пользователями.

Пример создания архива docs/usageкаталог из удаленного репозитория, к которому вы подключены с помощью ssh:

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

Дополнительная информация в этом сообщении в блоге и git документации .

Примечание по GitHub Repos:

GitHub не разрешает git-archive доступ .☹️

34 голосов
/ 17 июня 2015

Я создал проект с открытым исходным кодом, который называется GitHubFolderDownloader .Он позволяет загружать одну папку хранилища без клонирования или загрузки всего хранилища.

31 голосов
/ 13 сентября 2015

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

Как загрузить одну папку из репозитория github (Mac OS X):

~ Чтобы открыть терминал, просто нажмите прожектор и введите терминал, затем нажмите enter

  1. На Mac у вас, вероятно, уже есть SVN (для тестированияпросто откройте терминал и введите "svn" или "which svn" ~ без кавычек)
  2. На Github: найдите путь Github к вашей папке git (нерепо), щелкнув определенное имя папки в репо
  3. Скопируйте путь из адресной строки браузера
  4. Откройте терминал и введите: svn export
  5. Следующая вставка в адресе (например): https://github.com/mingsai/Sample-Code/tree/master/HeadsUpUI
  6. Заменить слова: дерево / мастер
  7. со словом: trunk
  8. Введите папку назначения для файлов (в этом примере ясохранить целевую папку внутри папки «Загрузки» для текущего пользователя)
  9. Здесь пробел - это просто пробел, а не слово (пробел) ~ / Downloads / HeadsUpUI
  10. Последняя команда терминала показывает полную команду для загрузки папки (сравните адрес с шагом 5) svn export https://github.com/mingsai/Sample-Code/trunk/HeadsUpUI ~ / Downloads / HeadsUpUI

BTW - Есливы используете Windows или другую платформу, вы можете найти бинарную загрузку subversion (svn) по адресу http://subversion.apache.org

~ Если вы хотите извлечь папку, а не просто загрузить ее, попробуйте воспользоваться справкой svn(tldr: заменить экспорт на извлечение )

Обновление

По поводу комментария о возобновлении прерванной загрузки/проверять, выписываться.Я бы попробовал запустить svn cleanup, а затем svn update.Пожалуйста, ищите SO для дополнительных опций.

23 голосов
/ 14 мая 2015

Кто бы ни работал над определенной папкой, он должен клонировать эту конкретную папку, для этого, пожалуйста, следуйте приведенным ниже шагам, используя разреженную проверку.

  1. Создать каталог.

  2. Инициализация Git-репозитория. (git init)

  3. Включить разреженные проверки. (git config core.sparsecheckout true)

  4. Сообщите Git, какие каталоги вы хотите (echo 2015 / brand / May (обратитесь к папке, над которой вы хотите работать) >> >> 1019 *)

  5. Добавить пульт (git remote add -f origin https://jafartke.com/mkt-imdev/DVM.git)

  6. Загрузка файлов (git pull origin master)

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

Вы не можете;В отличие от Subversion, где каждый подкаталог может быть извлечен отдельно, Git работает на основе полного репозитория.

Для проектов, где необходим более тонкий доступ, вы можете использовать субмодули - каждый подмодуль является отдельным проектом Gitи, следовательно, может быть клонирован по отдельности.

Возможно, что интерфейс Git (например, веб-интерфейс GitHub или gitweb) мог бы предоставить вам интерфейс для извлечения данной папки, но, насколько мне известноНи один из них не делает этого (хотя они позволяют вам скачивать отдельные файлы, поэтому, если папка не содержит слишком много файлов, это вариант)

Редактировать - GitHub фактически предоставляет доступ черезSVN, который позволит вам сделать именно это (согласно комментарию).См. https://github.com/blog/1438-improved-svn-here-to-stay-old-svn-going-away для получения последних инструкций о том, как это сделать

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

Если вы действительно хотите просто "скачать" папку, а не "клонировать" это (для разработки), самый простой способ просто получить копию самой последней версии репозитория (и, следовательно, папки / файла в нем), без необходимости клонировать весь репозиторий или даже устанавливать git в первую очередь, это загрузить zip-архив (для любого репо, fork, переходить, фиксировать и т. д.), перейдя в нужный репозиторий / fork / branch / commit на GitHub (например, http(s)://github.com/<user>/<repo>/commit/<Sha1> для копии файлов, которые были после определенной фиксации) и выбрав кнопку Downloads рядом с верхней -Хорошо.

Этот формат архива не содержит никакой магии git-repo, только сами отслеживаемые файлы (и, возможно, несколько файлов .gitignore, если они были отслежены, но вы можете игнорировать их: p) - это означает, что если код изменяется и если вы хотите оставаться на вершине, вам придется заново загрузить его вручную, а это также означает, что вы не сможете использовать его в качестве репозитория git ...

Не уверен, что это то, что вы ищете в этом случае (опять же "скачать" / просмотреть против "клон" / разработка), но это может быть полезно, тем не менее ...

...