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

3 голосов
/ 13 июля 2018

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

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

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

2 голосов
/ 20 сентября 2015

Чтобы экспортировать каталог из 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
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 было добавлено расширение для поддержки этой функции в v2.19.0, но в то время поддержка сервера отсутствовала. Но это уже может быть локально проверено.

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

1 голос
/ 14 апреля 2019

Простым ответом на это является первая черепаха 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 в текущем каталоге.

1 голос
/ 15 ноября 2014

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

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

0 голосов
/ 13 марта 2019

Если вы хотите использовать Python и SVN для загрузки определенного каталога GitHub, вот код, который вы будете использовать:

import validators
from svn.remote import RemoteClient

def download_folder(url):
    if 'tree/master' in url:
        url = url.replace('tree/master', 'trunk')

    r = RemoteClient(url)
    r.export('output')


if __name__ == '__main__':
    url = input('Enter folder URL: ')
    if not validators.url(url):
        print('Invalid url')
    else:
        download_folder(url)

Вы можете проверить более подробную информацию об этом коде и других поисках и загрузках GitHub.Советы в этом уроке: https://python.gotrained.com/search-github-api/

0 голосов
/ 25 октября 2018

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

function github-dir() {
    svn export "$(sed 's/tree\/master/trunk/' <<< "$1")" "$2"  
}
0 голосов
/ 24 января 2013

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

Конечно, вы должны быть владельцем желаемого репо

...