Завантажте окремі файли з 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 може допомогти ВАМ. Дивіться цю відповідь.
Minhas Kamal

1
Про GitLab див. Stackoverflow.com/a/51993087/6309 .
VonC

Це не працює для всіх, але якщо ви використовуєте пантони python, ви можете просто зробити щось подібне (працює і для великих файлів): натисніть "Переглянути сировину", а потім скопіюйте URL з браузера, а потім просто зробіть це: df = pd.read_csv ( ' raw.githubusercontent.com/t-davidson/… ')
Грем Хескет

Спробуйте Gitzip для github for chrome
subtleseeker

Відповіді:


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 : "Оскільки перенаправлення може бути змінено в деяких випадках, клієнт ДОЛЖЕН би використовувати URI-запит для майбутніх запитів."


16
Примітка для нащадків: я щойно перевірив це і добре використовував сировину для двійкових файлів.
emmby

1
спробував отримати ~ 10 Мб zip-файлу помилку: Помилка: блоб занадто великий
іна

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.
  3. У правому верхньому кутку, натисніть правою кнопкою миші на Rawкнопку.
  4. Зберегти як...

22
Замість "Зберегти як" скопіюйте URL-адресу. Це URL-адреса файлу. Тепер ви можете завантажити його будь-яким інструментом, який використовує URL для завантаження: wget, веб-переглядач тощо
jgomo3

1
@MattParkins Я просто спробував це, і я думаю, що він працює зараз для великих файлів (навіть бінарний файл із попередженням "ми не можемо показувати файли, які є зараз такими великими")
lmsurprenant

3
Перестаньте робити ці багатослівні кроки, використовуйте це хромоване розширення. 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
Чи можете ви навести кілька прикладів шляху. Якщо repo - це my-repo, а файл, який ви хочете отримати, знаходиться за адресою x / y / z.txt, тоді URL-адреса буде… Важко було зрозуміти, що / last / 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 Mavericks.
Jahkobi Digital

Я протестував на Chrome 34 у Windows 7 та OS X Mavericks, обидва працюють. досить дивно, якщо не робота так? Зверніть увагу, що папку не можна завантажити. Можливо, ви можете спробувати на іншій машині.
Cam Song

ОК, цей метод працюватиме лише за наявності хромованого розширення. chrome.google.com/webstore/detail/github-mate/…
гумав

З цього виду просто клацніть правою кнопкою миші та збережіть як файл
Thierry Dalon

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

Рельс композитор - прекрасний приклад цього.


2
Деякі файли розміщені на raw.githubusercontent.com
jcollum

1
а іноді це raw2.github.com просто fyi
jeremy.bass

11

Є хромоване розширення під назвою Enhanced Github

Це додасть кнопку для завантаження прямо праворуч від кожного файлу.

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


Це краще, ніж Github Mate, лише тому, що він не вимагає дозволу "Прочитати всю історію переглядів"! Не забудьте натиснути правою кнопкою миші кнопку завантаження> Зберегти посилання як.
Gh0sT

Необхідно додати маркер з вашого акаунта GitHub.
BartusZak

це безпечно для використання?
Аріанська сапутра

1
@Ariansaputra Я використовую його вже давно, жодного разу не стикався з жодними проблемами. Це повинно бути безпечним. Я не бачу, чому цього не було б
Авраам Мурчано Бензадон

@AbrahamMurcianoBenzadon спасибі
Arian saputra

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
Чи можете ви навести кілька прикладів шляху. Якщо ви repo - це 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 завантажиться у вашу систему.

Remeber, потрібно одночасно натиснути Alt і клацнути лівою кнопкою миші. Просто натискання кнопки "RAW" відкриє CSV у браузері.

Я сподіваюся, що це допомагає.


5

Ви повинні просто зробити це з raw URL-адресою вашого файлу.

Наприклад, завантажити 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. Підрив

  • GitHub не підтримує git-архів (функція git, яка дозволила б нам завантажувати конкретні файли). Однак GitHub підтримує різні функції Subversion, одну з яких ми можемо використовувати для цієї мети. Subversion - це система контролю версій (альтернатива git). Вам знадобиться встановлення Subversion. Візьміть URL-адресу GitHub для файлу, який ви хочете завантажити. Вам потрібно буде змінити цю 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
jabacchetta

приємно, дякую за те, що поділився цим! ТІЛ ...
Альберт

4

Функція GitHub Releases

Замість того , щоб завантажити посилання на конкретний файл в репозиторії, ви повинні використовувати GitHub в релізі особливості , щоб зв'язати завантажуються дані (наприклад, скомпільовані бінарні пакети) з позначкою версією вихідного коду , використовуваним для створення цих даних.

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

Ми раді оголосити випуски, робочий процес для доставки програмного забезпечення для кінцевих користувачів. Випуски - це першокласні об'єкти із журналами змін та бінарними активами, які представляють повну історію проекту за межами артефактів Git.

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

Після домовленостей багатьох проектів Git випуски прив’язуються до тегів Git. Ви можете використовувати наявний тег або дозволити випуски створювати тег, коли він публікується.

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


1
Так! Це найпростіше рішення, яке можна виконати прямо з вашого браузера! 1. releasesВиберіть на головній сторінці вашого сховища 2. Клацніть на номер комісії. 3. Знайдіть потрібний файл, натисніть на три крапки ...та виберіть View file4. Клацніть, View rawщоб завантажити файл !!!
Джонатан Бенн

3

Це безумовно спрацювало. Принаймні в Chrome. Клацніть правою кнопкою миші на піктограмі "RAW" -> Зберегти посилання як .


1
Це зберігає HTML-файл сторінки github, який включає обгортку github навколо файлу.
Грегор Томас

@Gregor - FYI, не повинно, принаймні, для сторінок, які є ТЕКСТАМИ. Якщо ви сумніваєтесь, лівою кнопкою миші натисніть на іконку «Сире». Це має відкрити текстовий файл у браузері БЕЗ будь-якого HTML. Тепер клацніть rt і натисніть будь-де на сторінці та зробіть "Зберегти як ...". (Або зробіть 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/

repo - https://github.com/KinoLien/gitzip

Перегляньте вищевказаний сайт, введіть URL-адресу репо або каталог, ви можете завантажити окремі файли або весь каталог у вигляді поштового файлу.


Але як я можу завантажити лише jszip.min.jsз цього сховища? обличчя троля
Леві Фуллер

відкрийте файл у github та перейдіть до сировини. Ви повинні побачити вихідний код файлу, а потім можете завантажити його за допомогою браузера правою кнопкою миші та зберегти як. Це працює для мене.
Борис

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 ... ви можете використовувати додаток cliget, яке генерує виклик curl, включаючи всі механізми аутентифікації (aka cookie).

Тож клацніть правою кнопкою миші на rawкліпту кнопки -> "скопіюйте URL для посилання", а потім вставте його в оболонку. Ви отримаєте свій файл, навіть якщо вам довелося увійти, щоб переглянути його.


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 ¢


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.