Скачать отдельные файлы с 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/… ')
Грэм Хескет

Ответы:


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 для будущих запросов».


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. Сохранить как...

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


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


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

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


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

6

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

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

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

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

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


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

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

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


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 .


2

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

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

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

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


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


0
  1. С правой стороны чуть ниже «Клон на рабочем столе» написано «Скачать Zip файл»
  2. Скачать Zip файл
  3. Распакуйте файл

Есть ли способ сделать это так, чтобы у вас было содержимое файла lfs?
Сова

0

Для пользователей с GitHub Enterprise вам нужно создать URL по следующей схеме

Invoke-WebRequest http://github.mycompany.com/api/v3/repos/my-org/my-repo/contents/myfiles/file.txt -Headers @{"Authorization"="token 8d795936d2c1b2806587719b9b6456bd16549ad8"}

Подробности можно найти здесь

http://artisticcheese.blogspot.com/2017/04/how-to-download-individual-files-from.html


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 ¢


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


-2

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

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

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

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

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

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.