Загрузите одну папку или каталог из репозитория GitHub

1106

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

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

git@github.com:foobar/Test.git

Его структура каталогов:

Test/
├── foo/ 
│   ├── a.py
│   └── b.py   
└── bar/
    ├── c.py
    └── d.py

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

g_inherit
источник
4
Я написал для этого сценарий оболочки, используя svn checkout - github.com/Decad/github-downloader
Деклан Кук
391
Может кто-нибудь объяснить мне, почему нет «официального» решения веб-интерфейса для этого? Это кажется тривиальной функцией, но очень полезной.
Александр - Восстановить Монику
3
Я разработал расширение для Chrome, используя gitzip от KinoLien. github.com/charany1/GHSDD
charany1
3
см. @janos answer svn альтернатива лучшая, без аутентификации, без регистрации, без ограничений, без плагинов
stackdave
5
Я сделал для этого облегченное решение ( download-directory.github.io ), и оно интегрировано в
усовершенствованный

Ответы:

1039

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


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

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

  1. Перейдите к папке, которую вы хотите скачать . Давайте скачать /testиз masterветки. пример URL репозитория github

  2. Измените URL для подрывной деятельности . Заменить tree/masterна trunk.

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

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

  3. Загрузите папку . Перейдите в командную строку и возьмите папку с SVN.

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

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

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

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

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

Ник
источник
162
Awesome, просто замените tree/masterс , trunkи вы можете получить папку конкретной.
Сержио Михельс
6
Спасибо @ user1146881 и @ SérgioMichels, вы должны заменить tree/masterна trunk. Эта информация должна быть добавлена ​​в ответ.
baptx
8
Я изменил это, чтобы использовать svn export, так как я не хотел рабочую копию Subversion. Затем я добавил получившуюся папку в Git. (Я как-то потерял большой кусок своего дерева каталогов, поэтому я экспортировал из репо, который я
раздвоил
5
@ num3ric - извините за поздний ответ, но вы должны иметь возможность заменить "trunk" на "branch / yourbranch"
ник
2
@ElijahLynn Спасибо за редактирование, я должен был включить эту информацию! 2 вещи, хотя - я принял ваше редактирование, но откатил некоторые из моих собственных (намеревался сделать это в любом случае, это было слишком грязно). Кроме того, я изменил ваш branchпуть branches, который я считаю правильным; если нет, продолжайте и измените его обратно.
ник
568

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

Вариант 1: расширение для браузера GitZip

Расширение Chrome , Firefox Addon

Применение:

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

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

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

Вариант 2: Github GH-страницы

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 и используется ссылка «получить токен» на этом сайте.

Kino
источник
5
Это круто, но выглядит так круто, что спрос толкает вас за ваш предел скорости, и он больше не работает ;-) Было бы здорово иметь возможность войти в систему с помощью GitHub oAuth - что позволило бы поддержку частного репо, а также увеличить ваш лимит скорости, так как они будут аутентифицированные запросы
hobailey
3
@hobailey Теперь он может получить токен доступа, чтобы увеличить ограничение скорости, а также получить доступ к частным репозиториям.
Кино
1
@MYounas Посмотрите на главы OAuth, Trees, Blobs в Github API Doc. , а также использовать JSZip, FileSaver.js библиотеки JS для реализации Gitzip.
Кино
1
Кто-нибудь заинтересовался бы расширением Chrome, которое делает это?
Goldylucks
4
Это действительно нужно добавить на настоящий сайт GitHub, это чрезвычайно полезно.
катится
510

Перейдите в DownGit > Введите свой URL> Скачать!

Теперь вы можете напрямую загрузить или создать DOWNLOAD LINK для любого общественного каталога или файла (GitHub специально большой файл ) с DownGit ! Вот простая демонстрация


DownGit


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

Минхас Камаль
источник
2
Братан, я имею в виду, как вы создали проект наподобие DownGit.
Мухаммед Юнус
12
Базовый метод: 1. взять ссылку на каталог (используется angular-route ), 2. перейти к GitHub API , 3. найти каталог и загрузить все файлы, 4. создать zip-файл с ним (я использовал jszip ) & сохранить его как файл ( для этого использовался файл- заставка ). Для ясного понимания я бы предложил взглянуть на мой проект .
Минхас Камаль
1
Спасибо Бро за подробные инструкции, я очень благодарен вам, если вы предложите какой-либо учебник или ссылку.
Мухаммед Юнус
5
Это круто, но это не работает с автоматизированными инструментами (такими как wget)
Ring
1
Это зависает, downloaded 25 of 25 filesкогда я пытаюсь скачать с этого URL: github.com/dssg/hitchhikers-guide/tree/master/curriculum/…
Wassadamo
165

Если у вас есть 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
Янош
источник
Это все еще работает? Попробовал это с TortiseSVN, и я получил ошибку разрешения, попросив предоставить учетные данные.
Джон
2
@john Я уверен, что уже слишком поздно, чтобы оказать большую помощь, но у вас включена двухфакторная аутентификация в вашей учетной записи GitHub? Если так, то я думаю, что где-то читал, что вам придется использовать предварительно сгенерированный ключ для пароля (который вы должны найти в настройках GitHub).
ник
1
Что касается форматирования URL, вы можете оставить .gitрасширение. Вы можете использовать полную ссылку на проект и начать с использования, svn lsза которым следует полный путь к проекту. Пример: svn ls https://github.com/RobTillaart/Arduino.git. Чтобы экспортировать только одну папку, вы просто добавляете /trunkжелаемый путь, например svn export https://github.com/RobTillaart/Arduino.git/trunk/libraries/DHTlib. Проще сохранить путь к проекту без изменений.
Джгроча
@jgrocha Я не уверен, что это работало так же в 2013 году, но сейчас работает, так что спасибо, обновил пост
Janos
1
Пример: чтобы загрузить контент https://github.com/miguelgrinberg/python-socketio/tree/master/examples/wsgi, запустите svn export https://github.com/miguelgrinberg/python-socketio.git/trunk/examples/wsgi. Вызываемый каталог wsgiбудет создан в текущем рабочем каталоге. Только исходные файлы, больше ничего. Нет .git, нет файлов, связанных с Subversion.
Rockallite
74

Для общего git Repo:

Если вы хотите загружать файлы, а не клонировать репозиторий с историей, вы можете сделать это с помощью 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.tar

Больше информации в этом посте и документации git .

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

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

RobW
источник
2
git archive --format tarформат не tar.gz, а tar.
之 羽 和 之
Это должен быть лучший ответ
Фелипе Коста
2
Я думаю, что это лучший ответ, но учтите, что команда git archive не работает с протоколом https.
битфокс
@yukihane отредактировал расширение от tar.gz до tar, мы надеемся, что с ним работает OP
mihai
36

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

VahidN
источник
Прекрасно работает, если вам нужно только загрузить папки с GitHub. Для загрузки нужной папки нужен только токен Github . Больше голосов могло дать этому ответу известность.
Алекс Эссильфи
34

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

Как загрузить одну папку из репозитория 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. со словом: багажник
  8. Введите папку назначения для файлов (в этом примере я сохраняю целевую папку внутри папки загрузок для текущего пользователя)
  9. Здесь пробел - это просто пробел, а не слово (пробел) ~ / Downloads / HeadsUpUI
  10. Последняя команда терминала отображает полную команду для загрузки папки (сравните адрес с шагом 5). Svn export https://github.com/mingsai/Sample-Code/trunk/HeadsUpUI ~ / Downloads / HeadsUpUI

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

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

Обновить

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

Томми С.
источник
1
Я должен загрузить много файлов из определенной папки и получил эту ошибку в середине загрузки: svn: E175002: ОТЧЕТ '/ bgmartins / scripts-parlamento /! Svn / vcc / default': 200 OK ( github.com ) У вас как я могу возобновить загрузку?
Мигель
Работал на меня. Это восхитительно.
Хит
24

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

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

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

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

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

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

  6. Получить файлы ( git pull origin master)

Мухаммед Джафар
источник
Жаль, что этот комментарий не получил достаточно голосов. Похоже, что предоставленное решение применимо ко всем git-репозиториям, а не только к github.
Калян
9
Это на самом деле не делает то, что хотел, хотя. Он все еще клонирует весь репозиторий, но не проверяет некоторые папки.
Крис
Решено здесь: stackoverflow.com/questions/4114887/…
JK
Я получаю эту ошибку: Редкий заказ не оставляет записи в рабочем каталоге.
оранжевая гусеница
20

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

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

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

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

мишель-SLM
источник
есть ли что-то через github API?
g_inherit
14

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

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

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

Джонни
источник
9
Если вы не видите ссылку для скачивания, убедитесь, что вы находитесь на главной странице репо (не в дочернем каталоге). Похоже, вы можете загрузить только zip-архив всего репо. Кроме того, эта страница справки github может быть полезна.
ДжейДи Смит
2
Легкий доступ по принципу «укажи и нажми». Легко получить предыдущий выпуск. Легко вытащить нужную папку из загруженного почтового индекса. Спасибо.
Энди Томас,
1
Родовое URL , чтобы получить загрузку из в tar.gz:https://github.com/${owner}/${repo}/archive/${hash}.tar.gz
Krisztian
11

2019 Резюме

Существует множество способов справиться с этим, в зависимости от того, хотите ли вы сделать это вручную или программно.

Ниже приведены четыре варианта. А для тех, кто предпочитает более подробное объяснение, я собрал видео на YouTube: загрузите отдельные файлы и папки с GitHub .

Кроме того, я опубликовал аналогичный ответ в StackOverflow для тех, кому нужно загружать отдельные файлы с GitHub (в отличие от папок).


1. Пользовательский интерфейс GitHub

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

2. Сторонние инструменты

  • Существует множество расширений для браузера и веб-приложений, которые могут справиться с этим , и одним из них является DownGit . Просто вставьте URL-адрес GitHub в папку (например https://github.com/babel/babel-eslint/tree/master/lib) и нажмите кнопку «Скачать».

3. Subversion

  • GitHub не поддерживает git-архив (функция git, которая позволяет нам загружать определенные папки). Однако GitHub поддерживает множество функций Subversion, одну из которых мы можем использовать для этой цели. Subversion - это система контроля версий (альтернатива git). Вам нужно будет установить Subversion. Захватите GitHub URL для папки, которую вы хотите скачать. Вам нужно будет изменить этот URL, однако. Требуется ссылка на репозиторий, за которой следует слово «транк» и заканчивающийся путем к вложенной папке. Другими словами, используя тот же пример ссылки на папку, который я упоминал выше, мы заменили «tree / master» на «trunk». Наконец, откройте терминал, перейдите в каталог, в который вы хотите загружать контент, введите следующую команду (заменив URL на созданный вами URL):svn export https://github.com/babel/babel-eslint/trunk/libи нажмите ввод.

4. GitHub API

  • Это решение вам понадобится, если вы хотите выполнить эту задачу программно. И это на самом деле то, что DownGit использует под капотом. Используя REST API GitHub , напишите скрипт, который выполняет GET-запрос к конечной точке содержимого. Конечная точка может быть построена следующим образом : https://api.github.com/repos/:owner/:repo/contents/:path. После замены заполнителей примерная конечная точка:https://api.github.com/repos/babel/babel-eslint/contents/lib, Это дает вам данные JSON для всего содержимого, которое существует в этой папке. В данных есть все, что вам нужно, включая то, является ли содержимое папкой или файлом, URL-адрес загрузки, если это файл, и конечная точка API, если это папка (чтобы вы могли получить данные для этой папки). Используя эти данные, скрипт может рекурсивно просматривать весь контент в целевой папке, создавать папки для вложенных папок и загружать все файлы для каждой папки. Проверьте код DownGit для вдохновения.
jabacchetta
источник
9

Еще один конкретный пример:

Как я хочу скачать папку «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

Обратите внимание на ствол в пути

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

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

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

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

zeeawan
источник
2
Просто нужно изменить оформление заказа на экспорт, если вы просто хотите скачать копию папки, а не оформить заказ.
Томми С.
Спасибо за ваш ответ, мы можем нырнуть ветку? скажем, я хочу скачать папку aaa ветви
feature1
7

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

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

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

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

Виллем ван Кетвич
источник
6

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

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

  1. Используйте wget, чтобы получить данные из GitHub (используя просмотр необработанных файлов).
  2. Пусть вышестоящие проекты опубликуют необходимый поднабор данных в качестве артефактов сборки.
  3. Сдавайся и используй полную кассу. Это большой успех в первой сборке, но если вы не получаете много трафика, в следующих сборках это не слишком хлопотно.
Маниш Шривастава
источник
4
Ну, это меньше, чем Git против Subversion, и более того, что GitHub категорически не позволяет git-архивировать. (Я хотел бы знать, почему.)
Роб Ховард
6

Если вы знакомы с командами 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 создает каталог-оболочку с именем ref в имени, поэтому он не может быть известен.
  • Вы, вероятно, хотите --strip-componentsбыть равным количеству слешей ( /) в пути (предыдущий аргумент).

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

Альбин
источник
5

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

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

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

araqnid
источник
1
Неверная команда: 'git-upload-archive' foobar / Test.git '' Похоже, вы используете ssh для клонирования URL git: //. Убедитесь, что опция конфигурации core.gitProxy и переменная окружения GIT_PROXY_COMMAND НЕ установлены. Неустранимый: Удаленный конец неожиданно зависает tar: Это не похоже на tar tar архив: Выход с состоянием ошибки из-за предыдущих ошибок
g_inherit
@g_inherit Я могу воспроизвести эту проблему. Хотя это может быть правильное направление, этот ответ неверен.
Uli Köhler
несмотря на очень много отрицательных голосов, это единственный совет, который работал для меня.
bhaskarc
5

Просто чтобы усилить ответы выше, реальный пример из реального репозитория 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

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

Джон Уошберн
источник
5

Ни один из ответов не помог в моей ситуации. Если вы разрабатываете для Windows, у вас, вероятно, нет SVN. Во многих ситуациях нельзя рассчитывать на то, что пользователи установят Git, или не хотят загружать целые репозитории по другим причинам. Некоторые из людей, которые ответили на этот вопрос, такие как Виллем ван Кетвич и Ацтак, создали инструменты для выполнения этой задачи. Однако, если инструмент написан не для языка, который вы используете, или вы не хотите устанавливать стороннюю библиотеку, это не сработает.

Тем не менее, есть гораздо более простой способ. GitHub имеет API, который позволяет загружать один файл или содержимое всего каталога с помощью запросов GET . Вы можете получить доступ к каталогу, используя https://api.github.com/repos/:owner/:repo_name/contents/:pathкоторый возвращает объект JSON, перечисляющий все файлы в каталоге. В перечисление включена ссылка на необработанное содержимое файла,download_url параметр. Файл может быть загружен с использованием этого URL.

Это двухэтапный процесс, требующий умения делать запросы GET, но он может быть реализован практически на любом языке, на любой платформе. Он может быть использован для получения файлов или каталогов.

Кальвин
источник
4

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

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

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

git-download.sh https://api.github.com/repos/ojbc/main/contents/shared/ojb-certs
Йогеш Чавла
источник
4

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

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

}

затем обновите оболочку

source ~/.bashrc 

тогда используй его с git-downloadfolder блаблабла: D

user1088530
источник
3

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

Использование простое, просто скопируйте соответствующую часть из проекта 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он просто будет работать (ссылка: https://stackoverflow.com/a/ 33464597/591257 ).

aesede
источник
3

Всего 5 шагов

1) Скачать SVN из здесь .
2) Откройте CMD и перейдите в каталог bin SVN, как показано ниже:

cd %ProgramFiles%\SlikSvn\bin

3) Давайте предположим , что я тусклый , чтобы загрузить этот каталог URL 4) Теперь Заменить С 5) Теперь запустите эту последнюю команду в папку загрузки в том же каталоге.
https://github.com/ZeBobo5/Vlc.DotNet/tree/develop/src/Samples

tree/develop
or
tree/master
trunk

svn export https://github.com/ZeBobo5/Vlc.DotNet/trunk/src/Samples

Мухаммед Али
источник
Это не работает для частных репозиториев
Sundeep Pidugu
Да, это не будет работать для частных респо, GIT рекомендуется для загрузки частного репо.
Мухаммед Али
2

Чтобы экспортировать каталог из GitHub, замените «/ tree / master /» в URL-адресе каталога на «/ trunk /».

Например, чтобы экспортировать каталог со следующего URL:

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

выполните следующую команду:

svn export https://github.com/liferay/liferay-plugins/trunk/portlets/sample-hibernate-portlet
Мохсен Абаси
источник
2

Прямой ответ на это - сначала черепаха SVN по следующей ссылке.

https://tortoisesvn.net/downloads.html

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

скопируйте ссылку на подкаталог git hub.

пример

https://github.com/tensorflow/models/tree/master/research/deeplab

заменить дерево / мастер стволом

https://github.com/tensorflow/models/trunk/research/deeplab

и делать

svn checkout https://github.com/tensorflow/models/trunk/research/deeplab

файлы будут загружены в папку deeplab в текущем каталоге.

хан
источник
2

Вы можете использовать git svn следующим образом.

git svn clone https://github.com/lodash/lodash/trunk/test

Таким образом, вам не нужно мучаться с настройкой SVN, особенно для пользователей Windows.

V3K3R
источник
Благодарю вас. Я могу поручиться, что это работает для Windows. Не работает на Gcloud, хотя. Он говорит , что мерзавец: «СВН» не является командой
ИОСИФ Blessingh
sudo apt install git-svnтребуется при запуске через WSL.
Джемми Доджер
1

Если вам нужно сделать это программно и вы не хотите полагаться на SVN, вы можете использовать GitHub API для рекурсивной загрузки всего содержимого.

Для вдохновения вот мой рубиновый гист: https://gist.github.com/cvengros/b2a7e82f66519d423b6f

PCV
источник
1

Используйте эту функцию, первый аргумент - это URL-адрес папки, второй - место, куда папка будет загружена:

function github-dir() {
    svn export "$(sed 's/tree\/master/trunk/' <<< "$1")" "$2"  
}
Счастливое лицо
источник
1

git clone --filter из Git 2.19

Эта опция фактически пропускает выборку ненужных объектов с сервера:

git clone --depth 1 --no-checkout --filter=blob:none \
  "file://$(pwd)/server_repo" local_repo
cd local_repo
git checkout master -- mydir/

Сервер должен быть настроен с:

git config --local uploadpack.allowfilter 1
git config --local uploadpack.allowanysha1inwant 1

Было сделано расширение для протокола Git remote для поддержки этой функции в v2.19.0, но в то время сервер не поддерживал. Но это уже можно проверить на месте.

Я рассмотрел это более подробно на: Как мне клонировать только подкаталог репозитория Git?

Ciro Santilli 郝海东 冠状 病 六四 事件 法轮功
источник
1
Интересный и одобренный. Я полагаю, я должен был упомянуть эту функцию 2.19 в другом месте.
VonC
@VonC Я думаю, что я однажды побил тебя этим: stackoverflow.com/questions/2466735/… и я посмотрел на него только после выхода XD! Я, конечно, сегодня гуглял чуть позже, после выпуска 2.22, конечно, все ответы уже были обновлены ;-) Меня не перестает удивлять то, что всегда остается еще один полудубликат, и я в конечном итоге нахожу его год спустя немного другой запрос. Я не собираюсь бить тебя по мерзости, хотя и слишком сильно, но следи за подсчетами некроманта! ха-ха
Сиро Сантилли 法轮功 冠状 病 六四 事件 法轮功
Ну, продолжайте в том же духе: все это сообщество выиграет от этого небольшого побочного соревнования (и я действительно поддержал ваш другой ответ в то время)
VonC
@VonC, конечно, шучу, я тоже одобряю твои вещи. Мне просто нужно найти способ обменять эти очки на деньги прямо сейчас XD
Сиро Сантилли 法轮功 冠状 病 六四 事件 法轮功
1

По какой-то причине svnрешение не работает для меня, и, поскольку мне больше svnничего не нужно, не было смысла тратить время на его создание, поэтому я искал простое решение, используя инструменты, которые у меня уже были. Этот скрипт использует только curlи awkдля загрузки всех файлов в каталоге GitHub, описанном как "/:user:repo/contents/:path".

Возвращенное тело вызова команды GitHub REST API "GET /repos/:user:repo/contents/:path"возвращает объект, который содержит "download_url"ссылку на каждый файл в каталоге.

Этот сценарий командной строки вызывает API REST с использованием curlи отправляет результат через AWK, который отфильтровывает все, кроме строк «download_url», удаляет кавычки и запятые из ссылок, а затем загружает ссылки, используя другой вызов curl.

curl -s https://api.github.com/repos/:user/:repo/contents/:path | awk \
     '/download_url/ { gsub("\"|,", "", $2); system("curl -O "$2"); }'
сосновая шишка
источник
1

git sparse-checkout

Git 2.25.0 включает в себя новую экспериментальную git sparse-checkoutкоманду, которая упрощает использование существующей функции, а также некоторые важные преимущества в производительности для больших репозиториев. ( Блог GitHub )

Пример с текущей версией :

git clone --filter=blob:none --sparse https://github.com/git/git.git
cd git
git sparse-checkout init --cone
git sparse-checkout add t

Наиболее заметно

  • --sparseпроверяет только файлы каталогов верхнего уровня gitрепозитория в рабочую копию
  • git sparse-checkout add tпостепенно добавляет / проверяет tподпапкуgit

Другие элементы

  • git sparse-checkout init делает некоторые приготовления, чтобы включить частичные проверки
  • --filter=blob:noneоптимизирует выборку данных, загружая только необходимые объекты git ( для получения дополнительной информации ознакомьтесь с функцией частичного клонирования )
  • --cone также повышает производительность, применяя более ограниченные шаблоны включения файлов

Статус GitHub

GitHub все еще оценивает эту функцию, пока она включена в нескольких репозиториях [...]. По мере того как функция стабилизируется и станет более зрелой, мы будем держать вас в курсе ее развития. ( документы )

ford04
источник
Upvoted. Я представил эту команду в stackoverflow.com/a/59515426/6309 с установленным шаблоном клонирования.
VonC