Скачать отдельные файлы с GitHub

625

Я предполагаю, что большинство из вас, разработчиков, используют любые VCS , и я надеюсь, что некоторые из вас используют Git. Есть ли у вас какие-либо советы или рекомендации, как получить URL-адрес для загрузки одного файла в хранилище?

Я не хочу URL для отображения необработанного файла; в случае двоичных файлов это даром.

http://support.github.com/discussions/feature-requests/41-download-single-file

Можно ли даже использовать GitHub в качестве «сервера загрузки»?

Если мы решим перейти на Google Code, будут ли здесь представлены упомянутые функции?

Или есть какой-нибудь бесплатный хостинг и VCS для проектов с открытым исходным кодом?

Радек Симко
источник
3
Функция GitHub Releases вступила, чтобы заполнить эту роль.
pkamb
@RadekSimko DownGit может помочь ВАМ. Смотрите этот ответ.
Минхас Камаль
1
Для GitLab см stackoverflow.com/a/51993087/6309 .
VonC
Это не будет работать для всех, но если вы используете Python-панд, вы можете просто сделать что-то вроде этого (работает и для больших файлов): нажмите «просмотреть raw», а затем скопируйте URL-адрес из браузера, а затем просто сделайте это: df = pd.read_csv ( ' raw.githubusercontent.com/t-davidson/… ')
Грэм Хескет
Попробуйте Gitzip для GitHub для Chrome
искатель хитрости

Ответы:

580

Git не поддерживает загрузку частей репозитория. Вы должны скачать все это. Но вы должны быть в состоянии сделать это с GitHub.

При просмотре файла у него есть ссылка на «сырую» версию. URL построен как так

https://raw.githubusercontent.com/user/repository/branch/filename

Заполнив пробелы в URL, вы можете использовать Wget или cURL-Lопцией, см. Ниже) или что угодно, чтобы загрузить один файл. Опять же, вы не получите ни одной из замечательных функций контроля версий, используемых Git.

Обновление: я заметил, что вы упоминаете, что это не работает для двоичных файлов. Вероятно, вам не следует использовать двоичные файлы в вашем репозитории Git, но GitHub имеет раздел загрузки для каждого репозитория, который вы можете использовать для загрузки файлов. Если вам нужно более одного двоичного файла, вы можете использовать файл .zip. URL-адрес для загрузки загруженного файла:

https://github.com/downloads/user/repository/filename

Обратите внимание, что приведенные выше URL-адреса с ссылок github.comбудут перенаправлены на raw.githubusercontent.com. Вы не должны напрямую использовать URL, указанный в этом перенаправлении HTTP 302, потому что, согласно RFC 2616 : «Поскольку перенаправление может иногда изменяться, клиент ДОЛЖЕН продолжать использовать Request-URI для будущих запросов».

jonescb
источник
16
Примечание для потомков: я только что проверил это и использую raw работает отлично для двоичных файлов.
Эмби
1
Попытка для ~ 10 МБ почтовый файл получил ошибку: Ошибка: BLOB-объект слишком большой
ina
32
Предлагаемый формат URL не работает для меня. Я считаю, что https://raw.github.com/user/repository/branch/filename работает.
Брайан К.
5
@BrianC .: (По крайней мере, по состоянию на 27 августа 2013 г.) формат URL, указанный в ответе ( rawпосле имени репозитория), теперь автоматически перенаправляется в указанный вами формат (имя хоста raw.github.com). В случае сомнений перейдите к соответствующему файлу на github.com и нажмите кнопку «Raw».
mklement0
10
если вы все еще хотите использовать curl, выполните перенаправление с помощью параметра -L в командной строке: curl -L -O github.com/user/repository/raw/branch/filename
Lynx-Lab
560
  1. Перейдите к файлу, который вы хотите скачать.
  2. Нажмите на него, чтобы просмотреть содержимое в GitHub UI.
  3. В правом верхнем углу, нажмите правой кнопкой мыши на Rawкнопку.
  4. Сохранить как...
bearfriend
источник
22
Вместо «Сохранить как» скопируйте URL. Вот URL-адрес файла. Теперь вы можете скачать его с помощью любого инструмента, который использует URL для загрузки: wget, ваш браузер и т. Д.
jgomo3
1
@MattParkins Я только что попробовал, и я думаю, что он работает сейчас для больших файлов (даже двоичный файл с предупреждением «мы не можем показать файлы, которые сейчас такие большие»)
lmsurprenant
3
Прекратите делать эти подробные шаги, используйте это расширение Chrome. chrome.google.com/webstore/detail/github-mate/…
Cam Song
3
Боже мой, краткий, простой, понятный, легкий для чтения и понимания ответ, который не только имеет смысл, но и работает без необходимости какого-либо внешнего стороннего БС! Если бы только все ответы StackOverflow были такими простыми. Спасибо.
падаван
2
Это сработало для одного файла C #. Возможно, GitHub следует добавить еще одну кнопку для загрузки. Нажатие правой кнопкой мыши не очень интуитивно понятно.
Ник
39

Вы можете использовать API V3 для получения необработанного файла, подобного этому (вам понадобится токен OAuth):

curl -H 'Authorization: token INSERTACCESSTOKENHERE' -H 'Accept: application/vnd.github.v3.raw' -O -L https://api.github.com/repos/owner/repo/contents/path

Все это должно идти в одну строку. -OОпция сохраняет файл в текущем каталоге. Ты можешь использовать-o filename чтобы указать другое имя файла.

Чтобы получить токен OAuth, следуйте инструкциям здесь: https://help.github.com/articles/creating-an-access-token-for-command-line-use

Я написал это как суть: https://gist.github.com/madrobby/9476733

thomasfuchs
источник
4
Это хорошо, но, к сожалению, он поддерживает только файлы размером до 1 МБ.
За Лундберг
1
Если вы выполняете это в программе, убедитесь, что User-Agent установлен.
Цугвалт,
1
Можете ли вы привести несколько примеров пути. Если вы используете репо my-repo, а файл, который вы хотите получить, находится по адресу x / y / z.txt, то URL-адрес будет ... Было трудно понять, что / owner / repo / должен быть заполнен мной. Спасибо.
Серый
Это прекрасно работает, но есть недостаток. Вы не всегда последняя версия файла. Попробуйте внести изменения в файл, не ждите слишком много и попробуйте получить файл, используя этот метод. Вместо этого вы получите только предыдущую версию.
pacomix
34

Согласно этой сути , вы можете использовать wget или cURL:

  1. Нажмите на имя файла в репозитории GitHub.
  2. Нажмите Raw, чтобы отобразить содержимое файла.
  3. Скопируйте URL в вашем браузере.
  4. В командной строке запустите:

    • wget --no-check-certificate --content-disposition https://URL-from-step3/
    • curl -LJO https://URL-from-step3/

    Еще один: в RHEL7.6 запустите следующее:

    • wget https://URL-from-step3/ --output-document=FILE_NAME
Тед Кокс
источник
Я использовал wgetнеобработанный путь к исходному файлу C, который я хотел, после просмотра файла в репозитории github и нажатия кнопки Raw. Работал как чемпион с Raspbian на моем Raspberry Pi 3.
Ричард Чамберс
Я немного опоздал на игру, но у меня это отлично сработало. Просмотр необработанного содержимого и затем щелчок правой кнопкой мыши для загрузки не помогли в моем случае, потому что мне был нужен файл в определенном формате, который не предлагался моим компьютером. Команды в этом ответе загружают все как есть.
Seankala
16

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

Скачать GitHub Mate

Cam Song
источник
1
@jcollum Проверено только сейчас, у меня работает. Можете ли вы убедиться, что используете последнюю версию? или дай мне знать ошибку. Рад помочь вам сделать это.
Cam Song
2
Я использую новейшую версию Chrome 34.0.1847.116, и это, безусловно, не работает. Какую операционную систему ты используешь? Я на OS X Маверикс.
Jahkobi Digital
Я тестировал на Chrome 34 в Windows 7 и OS X Mavericks, оба работают. довольно странно, если не работа, а? Обратите внимание, что эта папка не загружается. Может быть, вы можете попробовать на другой машине.
Cam Song
Хорошо, этот метод будет работать, только если у вас есть расширение Chrome. chrome.google.com/webstore/detail/github-mate/…
humazed
С этой точки зрения просто щелкните правой кнопкой мыши и сохраните как файл
Тьерри Далон
16

Вы можете использовать curlэтот способ:

curl -OL https://raw.githubusercontent.com/<username>/<repo-name>/<branch-name>/path/to/file

Oозначает, что curl загружает контент
Lозначает, что curl следует перенаправлению

отметка
источник
15

Теперь это возможно в GitHub для любого файла. Вам нужно перевести свои файлы на raw.github.com. Например, если ваш файл находится в вашем хранилище по адресу:

https://github.com/<username>/<repo>/some_directory/file.rb

Используя wget, вы можете получить необработанный файл из:

https://raw.github.com/<username>/<repo>/<branch>/some_directory/file.rb

Rails Composer является отличным примером этого.

Джо Лео
источник
2
Некоторые файлы размещены на raw.githubusercontent.com
jcollum
1
а иногда это raw2.github.com просто к вашему сведению
jeremy.bass
11

Существует расширение Chrome под названием Enhanced Github.

Это добавит кнопку загрузки прямо справа от каждого файла.

введите описание изображения здесь

Авраам Мурчиано Бензадон
источник
Это лучше, чем Github Mate исключительно потому, что он не запрашивает разрешение «Читать всю историю просмотров»! Не забудьте щелкнуть правой кнопкой мыши по кнопке загрузки> Сохранить ссылку как.
Gh0sT
Необходимо добавить токен из вашей учетной записи GitHub.
BartusZak
это безопасно для использования?
Ариан Сапутра
1
@Ariansaputra Я давно пользуюсь им, никогда не сталкивался с какими-либо проблемами. Это должно быть безопасно. Я не понимаю, почему это не будет
Авраам Мурчиано Бензадон
@AbrahamMurcianoBenzadon спасибо
Ариан Сапутра
10

Чтобы узнать, что сказал thomasfuchs, но вместо этого для пользователей GitHub Enterprise, вот что вы можете использовать.

curl -H 'Authorization: token INSERTACCESSTOKENHERE' -H 'Accept: application/vnd.github.v3.raw' -O -L https://your_domain/api/v3/repos/owner/repo/contents/path

Также вот документация по API https://developer.github.com/v3/repos/contents

Дрю Мишель
источник
1
Можете ли вы привести несколько примеров пути. Если вы используете репо my-repo, а файл, который вы хотите получить, находится в x / y / z.txt, тогда URL-адрес будет ... Спасибо
Серый
1
@Grayhttps://your_domain/api/v3/repos/{owner}/my-repo/contents/x/y/z.txt
Григорий Сувалиан,
если я хочу скачать файл из ветки? как мне это сделать?
Карлос Андрес
@CarlosAndres использует параметр ref developer.github.com/v3/repos/contents/#parameters-1
Дрю Мишель,
9

Если вы хотите скачать zip-файл с githubпомощьюwget

wget -O filename.zip https://github.com/downloads/user/repository/filename.zip?raw=true

см. этот сайт для более подробной информации

DJJ
источник
Вы можете скачать любой файл, а не только .zip.
enriquetaso
6

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

Давайте поговорим о файлах CSV. Если вы хотите скачать файл CSV:

  1. Перейдите к тому конкретному набору данных, который вы хотите загрузить, и щелкните по нему.
  2. Вы увидите кнопку «Raw» в верхней правой части набора данных.
  3. Нажмите «Alt», а затем нажмите левую кнопку «Raw».
  4. Весь CSV будет загружен в вашу систему.

Помните, вы должны нажать Alt и левой кнопкой мыши одновременно. Простое нажатие на кнопку «Raw» откроет CSV в браузере.

Надеюсь, это поможет.

saadi123
источник
5

Вы должны просто сделать это с rawURL вашего файла.

Например, чтобы загрузить README AFNetworking:

curl https://raw.githubusercontent.com/AFNetworking/AFNetworking/master/README.md > ADREADME.md 

Поскольку это публичное репо, вам не нужны никакие учетные данные. Обратите внимание на вид URL:raw.githubusercontent.com/path/to/file

Кевин Делорд
источник
4

2019 Резюме

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

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

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


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

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

2. Контекстное меню браузера

  • Перейдите к файлу на GitHub, щелкните правой кнопкой мыши по кнопке «Raw», чтобы открыть контекстное меню браузера. Оттуда, если вы используете Google Chrome, выберите «Сохранить ссылку как ...». Другие браузеры будут иметь похожий пользовательский интерфейс, но описание выбора может отличаться. Например, в Safari он будет указан как «Загрузить связанный файл» и «Загрузить связанный файл как».

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

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

4. Subversion

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

5. CURL

  • Вам нужно установить CURL. Перейдите к файлу на GitHub.com, щелкните левой кнопкой мыши по кнопке «Raw», чтобы перейти к прямой ссылке на файл, скопируйте этот URL, откройте терминал, перейдите в каталог, в который вы хотите загружать контент, введите следующую команду, заменив имя файла с тем, что вы хотите назвать его, и заменив URL с той , которую вы скопировали: curl -o parse.js https://raw.githubusercontent.com/babel/babel-eslint/master/lib/parse.js.

6. 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/parse.js. Это дает вам данные JSON для этого файла, включая URL-адрес для загрузки (тот же URL-адрес для загрузки, который мы использовали в приведенном выше примере cURL). Однако этот метод не так уж полезен для отдельного файла (вы, скорее всего, будете использовать его для загрузки определенной папки, как подробно описано в ответе, на который я ссылался выше).
jabacchetta
источник
Насколько я понимаю, кнопки загрузки не загружают весь репозиторий ... я могу ошибаться. Вот пример: github.com/googleapis/google-api-php-client, если вы загрузите репозиторий, вы не получите каталог с примерами; Вы должны изменить ветви, чтобы сделать это.
Альберт
1
@albert Хороший улов. Это на самом деле потому, что они специально исключили определенные папки / файлы в файле .gitattributes: github.com/googleapis/google-api-php-client/blob/master/…
jabacchetta
хорошо, спасибо, что поделились этим! ТИЛ ...
Альберт
4

Функция GitHub Releases

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

https://github.com/blog/1547-release-your-software

Мы рады анонсировать релизы, рабочий процесс для доставки программного обеспечения конечным пользователям. Релизы - это первоклассные объекты с журналами изменений и двоичными активами, которые представляют полную историю проекта за пределами артефактов Git.

Релизы сопровождаются примечаниями к выпуску и ссылками для загрузки программного обеспечения или исходного кода.

Следуя соглашениям многих проектов Git, релизы привязаны к тегам Git. Вы можете использовать существующий тег или позволить релизам создавать тег при публикации.

введите описание изображения здесь

pkamb
источник
1
Да! Это самое простое решение, выполнимое прямо из вашего браузера! 1. На главной странице своего хранилища выберите releases2. Нажмите на номер коммита. 3. Найдите нужный файл, нажмите на три точки ...и выберите View file4. Нажмите, View rawчтобы загрузить файл !!!
Джонатан Бенн
3

Это определенно будет работать. По крайней мере, в Chrome. Щелкните правой кнопкой мыши значок «Raw» -> Сохранить ссылку как .

Анкиш джайн
источник
1
Это сохранит HTML-файл страницы github, который включает в себя оболочку github вокруг файла.
Грегор Томас
@ Грегор - К вашему сведению, не должно, по крайней мере, для страниц, которые являются текстовыми. Если сомневаетесь, нажмите левую кнопку мыши на значке «Raw». Это должно открыть текстовый файл в браузере, без любого HTML. Теперь щелкните правой кнопкой мыши в любом месте страницы и выполните команду «Сохранить как ...». (Или Select-All / Copy, а затем вставьте туда , куда вы хотите)
ToolmakerSteve
3

Чтобы загрузить файл из репозитория Github, используйте команду 'curl' со ссылкой на необработанный файл.

curl https://raw.githubusercontent.com/user/repo/filename --output filename

Добавьте параметр --output, а затем новое имя файла, чтобы загрузить необработанный файл во вновь созданный файл.

Джордж
источник
2
  1. Страница, на которую вы ссылаетесь, отвечает на первый вопрос.

  2. GitHub также имеет возможность загрузки таких вещей, как релизы.

  3. У Google Code вообще нет Git .

  4. GitHub, Google Code и SourceForge - это бесплатный хостинг. SourceForge все еще может делать CVS .

bmargulies
источник
2

Я недавно нашел сервис под названием gitzip и также с открытым исходным кодом:

сайт - http://kinolien.github.io/gitzip/

РЕПО - https://github.com/KinoLien/gitzip

Посетите вышеуказанный сайт, введите URL-адрес хранилища или каталога, вы можете скачать отдельные файлы или весь каталог в виде zip-файла.

AVI
источник
Но как мне загрузить только jszip.min.jsиз этого хранилища? Лицо тролля
Леви Фуллер
откройте файл в github и затем перейдите в raw. Затем вы должны увидеть исходный код файла, а затем загрузить его, используя браузер, щелкнув правой кнопкой мыши и сохранить как. Меня устраивает.
Борис
2

Теперь можно загрузить любой файл или любую конкретную папку в репозитории с помощью этого расширения Google Chrome:

GitZip для github: ссылка: https://chrome.google.com/webstore/detail/gitzip-for-github/ffabmkklhbepgcgfonabamgnfafbdlkn

Применение :

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

введите описание изображения здесь

введите описание изображения здесь

Натеш бхат
источник
1

Если вы используете curl и firefox ... вы можете использовать кликет надстройку которая генерирует вызов curl, включая все механизмы аутентификации (также называемые куки).

Поэтому щелкните правой кнопкой мыши на rawкнопке cliget -> «Скопировать URL для ссылки», а затем вставьте ее в оболочку. Вы получите свой файл, даже если вам пришлось войти в систему, чтобы увидеть его.

estani
источник
0
  1. С правой стороны чуть ниже «Клон на рабочем столе» написано «Скачать Zip файл»
  2. Скачать Zip файл
  3. Распакуйте файл
Эван Гертис
источник
Есть ли способ сделать это так, чтобы у вас было содержимое файла lfs?
Сова
0

Или попробуйте это

const https = require('https');
const fs = require('fs');
const DOMAIN = 'raw.githubusercontent.com';

function writeFile(data, fileName) {
  fs.appendFile(fileName, data.toString(), err => {
    if (err) {
      console.log('error in writing file', err);
    }
  });
}

function EOF(data) {
  console.log('EOF');
}

function getFileName(pathToFile) {
  var result = pathToFile.split('/');
  var splitLength = result.length;
  return result[splitLength - 1];
}
function getFile(branchName, username, repoName, ...pathToFile) {
  pathToFile.forEach(item => {
    const path = `/${username}/${repoName}/${branchName}/${item}`;
    const URL = `${DOMAIN}${path}`;
    const options = {
      hostname: DOMAIN,
      path: path
    };
    var fileName = getFileName(item);

    https
      .get(options, function(res) {
        console.log(res.statusCode);
        /* if file not found */
        if (res.statusCode === 404) {
          console.log('FILE NOT FOUND');
        } else {
          /* if file found */
          res.on('data', data => writeFile(data, fileName));
          res.on('end', data => EOF(data));
        }
      })
      .on('error', function(res) {
        console.log('error in reading URL');
      });
  });
}
getFile('master', 'bansalAyush', 'InstagramClone', '.babelrc', 'README.md');
Аюш Бансал
источник
0

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

https://github.com/user/repository/raw/branch/filename

^^^ вышеупомянутое не очень полно в моем уме

https://github.com/<user>/<repoROOTname>/blob/master/<path>/<filename>?raw=true

некоторые говорят, что raw.github.com или raw вместо blob, но у меня работает вторая строка, и я надеюсь, что она поможет другим ...

2 ¢

rezwits
источник
0

Вы можете попробовать github-files-fetcher , это инструмент командной строки, который загружает одну папку или файл из репозитория GitHub.

Представьте себе реальный сценарий: вы посещали следующую страницу веб-страницы и хотите загрузить asyncтолько один подкаталог.

https://github.com/reduxjs/redux/tree/master/examples

извините за то, что не разрешено публиковать изображения.

С помощью github-files-fetcher, вы должны сначала скопировать urlэту страницу, которая является https://github.com/reduxjs/redux/tree/master/examples/async , а затем запустить команду ниже в командной строке:

fetcher --url=https://github.com/reduxjs/redux/tree/master/examples/async

Gyumeijie
источник
-2

Это то, что сработало для меня только сейчас ...

  1. Откройте необработанный файл в отдельной вкладке.

  2. Скопируйте все это в свой блокнот в новый файл.

  3. Сохраните файл в том расширении, в котором он был изначально

протестировано с файлом php, который я скачал только сейчас (на момент ответа)

ученик
источник