Как я могу загрузить только определенную папку или каталог с удаленного репозитория Git, размещенного на GitHub?
Скажем, пример репозитория GitHub живет здесь:
git@github.com:foobar/Test.git
Его структура каталогов:
Test/
├── foo/
│ ├── a.py
│ └── b.py
└── bar/
├── c.py
└── d.py
Я хочу скачать только папку foo, а не клонировать весь тестовый проект.
Ответы:
Обновление сентябрь 2016: сообщество разработало несколько инструментов, которые могут сделать это для вас:
Git не поддерживает это, но Github делает это через SVN. Если вы извлекаете свой код с помощью Subversion, Github по существу преобразует репозиторий из Git в Subversion на серверной части, а затем обслуживает запрошенный каталог.
Вот как вы можете использовать эту функцию для загрузки определенной папки. Я буду использовать популярную библиотеку JavaScript
lodash
в качестве примера.Перейдите к папке, которую вы хотите скачать . Давайте скачать
/test
изmaster
ветки.Измените URL для подрывной деятельности . Заменить
tree/master
наtrunk
.https://github.com/lodash/lodash/tree/master/test
➜https://github.com/lodash/lodash/trunk/test
Загрузите папку . Перейдите в командную строку и возьмите папку с SVN.
Вы можете не увидеть никаких действий сразу, потому что Github занимает до 30 секунд для конвертации больших репозиториев, так что наберитесь терпения.
Это все! Github также поддерживает больше возможностей subversion , включая поддержку фиксации и отправки изменений.
источник
tree/master
с ,trunk
и вы можете получить папку конкретной.tree/master
наtrunk
. Эта информация должна быть добавлена в ответ.svn export
, так как я не хотел рабочую копию Subversion. Затем я добавил получившуюся папку в Git. (Я как-то потерял большой кусок своего дерева каталогов, поэтому я экспортировал из репо, который яbranch
путьbranches
, который я считаю правильным; если нет, продолжайте и измените его обратно.Два варианта этой функции:
Вариант 1: расширение для браузера GitZip
Применение:
Получить токен:
Вариант 2: Github GH-страницы
Шаг 1: Введите URL-адрес github в поле справа вверху.
Шаг 2: Нажмите ввод или нажмите «Загрузить» для загрузки zip напрямую или нажмите «Поиск» для просмотра списка подпапок и файлов.
Шаг 3: Нажмите «Скачать файл Zip» или «Получить файл», чтобы получить файлы.
В большинстве случаев это работает нормально, за исключением того, что папка содержит более 1000 файлов из-за ограничения Github Trees API. (относится к Github API # Contents )
Кроме того, он может поддерживать частные / публичные репозитории и обновлять ограничение скорости, если у вас есть учетная запись GitHub и используется ссылка «получить токен» на этом сайте.
источник
Перейдите в DownGit > Введите свой URL> Скачать!
Теперь вы можете напрямую загрузить или создать DOWNLOAD LINK для любого общественного каталога или файла (GitHub специально большой файл ) с DownGit ! Вот простая демонстрация
Вы также можете настроить свойство загруженного файла - подробное использование .
источник
downloaded 25 of 25 files
когда я пытаюсь скачать с этого URL: github.com/dssg/hitchhikers-guide/tree/master/curriculum/…Если у вас есть
svn
, вы можете использоватьsvn export
для этого:Обратите внимание на формат URL:
https://github.com/
/trunk
добавлен в концеПрежде чем запускать
svn export
, сначала проверьте содержимое каталога с помощью:источник
.git
расширение. Вы можете использовать полную ссылку на проект и начать с использования,svn ls
за которым следует полный путь к проекту. Пример:svn ls https://github.com/RobTillaart/Arduino.git
. Чтобы экспортировать только одну папку, вы просто добавляете/trunk
желаемый путь, напримерsvn export https://github.com/RobTillaart/Arduino.git/trunk/libraries/DHTlib
. Проще сохранить путь к проекту без изменений.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.Для общего git Repo:
Если вы хотите загружать файлы, а не клонировать репозиторий с историей, вы можете сделать это с помощью
git-archive
.git-archive
создает сжатый zip или tar архив из git репозитория. Некоторые вещи, которые делают его особенным:.git/
папку или любые неотслеживаемые файлы в репозитории, в котором он запущен.Пример создания архива
docs/usage
каталога из удаленного репозитория, к которому вы подключены с помощью ssh:Больше информации в этом посте и документации git .
Примечание по GitHub Repos:
GitHub не разрешает
git-archive
доступ . ☹️источник
git archive --format tar
формат не tar.gz, а tar.Я создал проект с открытым исходным кодом, который называется GitHubFolderDownloader . Это позволяет загружать одну папку хранилища без клонирования или загрузки всего хранилища.
источник
Ничего плохого в других ответах нет, но я просто решил поделиться пошаговыми инструкциями для тех, кто впервые проходит через этот процесс.
Как загрузить одну папку из репозитория github (Mac OS X):
Кстати, если вы работаете в Windows или на другой платформе, вы можете найти бинарную загрузку Subversion (SVN) на http://subversion.apache.org
Обновить
По поводу комментария о возобновлении прерванной загрузки / оформления заказа. Я бы попробовал бежать с
svn cleanup
последующимsvn update
. Пожалуйста, ищите SO для дополнительных опций.источник
Кто бы ни работал над определенной папкой, он должен клонировать эту конкретную папку, для этого, пожалуйста, следуйте приведенным ниже шагам, используя разреженную проверку.
Создать каталог.
Инициализируйте Git-репозиторий. (
git init
)Включить разреженные проверки. (
git config core.sparsecheckout true
)Сообщите Git, какие каталоги вы хотите (echo 2015 / brand / May (обратитесь к папке, над которой вы хотите работать) >>
.git/info/sparse-checkout
)Добавьте пульт (
git remote add -f origin https://jafartke.com/mkt-imdev/DVM.git
)Получить файлы (
git pull origin master
)источник
Тебе нельзя; в отличие от Subversion, где каждый подкаталог может быть извлечен отдельно, Git работает на основе всего хранилища.
Для проектов, где необходим более детальный доступ, вы можете использовать подмодули - каждый подмодуль является отдельным проектом Git и, следовательно, может быть клонирован индивидуально.
Возможно, что пользовательский интерфейс Git (например, веб-интерфейс GitHub или gitweb) мог бы предоставить вам интерфейс для извлечения заданной папки, но, насколько мне известно, никто из них этого не делает (хотя они позволяют вам скачивать отдельные файлы). , так что если папка не содержит слишком много файлов, это вариант)
Редактировать - GitHub на самом деле предлагает доступ через SVN, что позволит вам сделать именно это (согласно комментарию). См. Https://github.com/blog/1438-improved-svn-here-to-stay-old-svn-going-away для получения последних инструкций о том, как это сделать.
источник
Если вы действительно хотите просто «загрузить» папку, а не «клонировать» ее (для разработки), самый простой способ - просто получить копию самой последней версии репозитория (и, следовательно, папки / файла в ней), без необходимости клонировать весь репозиторий или даже установить git в первую очередь, это загрузить zip-архив (для любого репо, ветки, ветки, коммита и т. д.), перейдя в нужный репозиторий / fork / branch / commit на GitHub (например,
http(s)://github.com/<user>/<repo>/commit/<Sha1>
для копии файлов, какими они были после определенной фиксации) и выбораDownloads
кнопки в правом верхнем углу.Этот формат архива не содержит никакой магии git-repo, только сами отслеживаемые файлы (и, возможно, несколько файлов .gitignore, если они были отслежены, но вы можете игнорировать их: p) - это означает, что если код изменяется, и вы хотите оставайтесь на вершине, вам придется повторно загрузить его вручную, а это также означает, что вы не сможете использовать его в качестве git-репозитория ...
Не уверен, что это то, что вы ищете в этом случае (опять же «скачать» / просмотреть против «клон» / разработать), но, тем не менее, это может быть полезно ...
источник
tar.gz
:https://github.com/${owner}/${repo}/archive/${hash}.tar.gz
2019 Резюме
Существует множество способов справиться с этим, в зависимости от того, хотите ли вы сделать это вручную или программно.
Ниже приведены четыре варианта. А для тех, кто предпочитает более подробное объяснение, я собрал видео на YouTube: загрузите отдельные файлы и папки с GitHub .
Кроме того, я опубликовал аналогичный ответ в StackOverflow для тех, кому нужно загружать отдельные файлы с GitHub (в отличие от папок).
1. Пользовательский интерфейс GitHub
2. Сторонние инструменты
https://github.com/babel/babel-eslint/tree/master/lib
) и нажмите кнопку «Скачать».3. Subversion
svn export https://github.com/babel/babel-eslint/trunk/lib
и нажмите ввод.4. GitHub API
https://api.github.com/repos/:owner/:repo/contents/:path
. После замены заполнителей примерная конечная точка:https://api.github.com/repos/babel/babel-eslint/contents/lib
, Это дает вам данные JSON для всего содержимого, которое существует в этой папке. В данных есть все, что вам нужно, включая то, является ли содержимое папкой или файлом, URL-адрес загрузки, если это файл, и конечная точка API, если это папка (чтобы вы могли получить данные для этой папки). Используя эти данные, скрипт может рекурсивно просматривать весь контент в целевой папке, создавать папки для вложенных папок и загружать все файлы для каждой папки. Проверьте код DownGit для вдохновения.источник
Еще один конкретный пример:
Как я хочу скачать папку «iOS Pro Geo» из URL
https://github.com/alokc83/APRESS-Books-Source-Code-/ tree / master /% 20Pro% 20iOS% 20Geo
и я могу сделать это через
Обратите внимание на ствол в пути
Отредактировано: (согласно комментарию Томми Си)
Да, использование экспорта вместо извлечения даст чистую копию без дополнительных файлов репозитория git.
Отредактировано: если в url нет дерева / мастера, тогда разместите его, и оно будет там в URL-адресе.
источник
Существует пакет пипов Python3,
githubdl
который может сделать это *:Страница проекта находится здесь
* Отказ от ответственности: я написал этот пакет.
источник
Это одно из немногих мест, где SVN лучше, чем Git.
В конце мы стремились к трем вариантам:
источник
Если вы знакомы с командами Unix, вам не нужны специальные зависимости или веб-приложения для этого. Вы можете скачать репо в виде тарбола и распаковать только то, что вам нужно.
Пример (файлы woff2 из подкаталога в fontawesome):
*/
) для соответствия любому каталогу. Github создает каталог-оболочку с именем ref в имени, поэтому он не может быть известен.--strip-components
быть равным количеству слешей (/
) в пути (предыдущий аргумент).Это загрузит весь tarball. Используйте метод SVN, упомянутый в других ответах, если этого следует избегать или если вы хотите быть милым с серверами GitHub.
источник
Вы можете сделать простую загрузку дерева каталогов:
Но если вы хотите проверить это и иметь возможность делать коммиты и толкать их назад, нет, вы не можете этого сделать.
источник
Просто чтобы усилить ответы выше, реальный пример из реального репозитория GitHub в локальный каталог:
Иногда конкретный пример помогает уточнить предложенные замены.
источник
Ни один из ответов не помог в моей ситуации. Если вы разрабатываете для Windows, у вас, вероятно, нет SVN. Во многих ситуациях нельзя рассчитывать на то, что пользователи установят Git, или не хотят загружать целые репозитории по другим причинам. Некоторые из людей, которые ответили на этот вопрос, такие как Виллем ван Кетвич и Ацтак, создали инструменты для выполнения этой задачи. Однако, если инструмент написан не для языка, который вы используете, или вы не хотите устанавливать стороннюю библиотеку, это не сработает.
Тем не менее, есть гораздо более простой способ. GitHub имеет API, который позволяет загружать один файл или содержимое всего каталога с помощью запросов GET . Вы можете получить доступ к каталогу, используя
https://api.github.com/repos/:owner/:repo_name/contents/:path
который возвращает объект JSON, перечисляющий все файлы в каталоге. В перечисление включена ссылка на необработанное содержимое файла,download_url
параметр. Файл может быть загружен с использованием этого URL.Это двухэтапный процесс, требующий умения делать запросы GET, но он может быть реализован практически на любом языке, на любой платформе. Он может быть использован для получения файлов или каталогов.
источник
Наша команда написала сценарий bash для этого, потому что мы не хотели устанавливать SVN на наш сервер.
https://github.com/ojbc/docker/blob/master/java8-karaf3/files/git-download.sh
Он использует github API и может быть запущен из командной строки следующим образом:
источник
Я использую Linux так, поместите это в ~ / .bashrc, называется даже: D $ HOME / .bashrc
затем обновите оболочку
тогда используй его с git-downloadfolder блаблабла: D
источник
Я работаю с серверами 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 ).источник
Всего 5 шагов
источник
Чтобы экспортировать каталог из GitHub, замените «/ tree / master /» в URL-адресе каталога на «/ trunk /».
Например, чтобы экспортировать каталог со следующего URL:
выполните следующую команду:
источник
Прямой ответ на это - сначала черепаха SVN по следующей ссылке.
во время установки включите параметр CLI, чтобы его можно было использовать из интерфейса командной строки.
скопируйте ссылку на подкаталог git hub.
заменить дерево / мастер стволом
и делать
файлы будут загружены в папку deeplab в текущем каталоге.
источник
Вы можете использовать git svn следующим образом.
Таким образом, вам не нужно мучаться с настройкой SVN, особенно для пользователей Windows.
источник
sudo apt install git-svn
требуется при запуске через WSL.Если вам нужно сделать это программно и вы не хотите полагаться на SVN, вы можете использовать GitHub API для рекурсивной загрузки всего содержимого.
Для вдохновения вот мой рубиновый гист: https://gist.github.com/cvengros/b2a7e82f66519d423b6f
источник
Используйте эту функцию, первый аргумент - это URL-адрес папки, второй - место, куда папка будет загружена:
источник
git clone --filter
из Git 2.19Эта опция фактически пропускает выборку ненужных объектов с сервера:
Сервер должен быть настроен с:
Было сделано расширение для протокола Git remote для поддержки этой функции в v2.19.0, но в то время сервер не поддерживал. Но это уже можно проверить на месте.
Я рассмотрел это более подробно на: Как мне клонировать только подкаталог репозитория Git?
источник
По какой-то причине
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.источник
git sparse-checkout
Пример с текущей версией :
Наиболее заметно
--sparse
проверяет только файлы каталогов верхнего уровняgit
репозитория в рабочую копиюgit sparse-checkout add t
постепенно добавляет / проверяетt
подпапкуgit
Другие элементы
git sparse-checkout init
делает некоторые приготовления, чтобы включить частичные проверки--filter=blob:none
оптимизирует выборку данных, загружая только необходимые объекты git ( для получения дополнительной информации ознакомьтесь с функцией частичного клонирования )--cone
также повышает производительность, применяя более ограниченные шаблоны включения файловСтатус GitHub
источник