Как загрузить отдельные файлы из репозитория Github
Хотя Github чаще всего используется для размещения больших проектов кода, он также работает как довольно хороший файловый хост, и иногда вы просто хотите загрузить один или два файла, не клонируя весь репозиторий. Github поддерживает это как с сайта, так и из командной строки.
Загрузка одного файла с веб-сайта Github
Если вы хорошо используете свой веб-браузер, вы можете довольно легко загружать отдельные файлы. Перейдите к файлу, который вы хотите загрузить, и нажмите «Raw:».
Откроется страница с прямой ссылкой на файл. Вы можете скопировать/вставить отсюда, но в большинстве браузеров вы должны иметь возможность щелкнуть правой кнопкой мыши и выбрать «Сохранить как», чтобы загрузить файл напрямую.
Для файлов с кодом он может попытаться сохранить как .txt
, который вам нужно будет исправить вручную до или после загрузки.
Загрузка из командной строки
Поскольку файлы подаются с raw.githubusercontent.com
, их можно скачать напрямую через wget
или curl
. Они хранятся в доступных местах, поэтому, если вы знаете имя пользователя, репозиторий и путь к файлу, вы можете скачать любой файл в любой ветке следующим образом:
wget https://raw.githubusercontent.com/username/repository/branch/path/filename.md
Если вы предпочитаете использовать Git API, вы можете взаимодействовать с ним более напрямую и загружать файлы, когда вы не уверены в точном местоположении файла. Вам нужно будет создать личный токен доступа для использования API, которым вы можете заменить «ACCESS_TOKEN» в этом скрипте.
curl -H 'Authorization: token ACCESS_TOKEN ' -H 'Accept: application/vnd.github.v3.raw' -O -L https://api.github.com/repos/username/repository/contents/path/filename.md
Конечная точка /repos/{user}/{repo}/contents
будет выполнять разные действия в зависимости от того, указывает ли путь на каталог или файл. Если это файл, он вернет метаданные об этом файле:
{ "type": "file", "encoding": "base64", "size": 5362, "name": "README.md", "path": "README.md", "content": "encoded content ...", "sha": "3d21ec53a331a6f037a91c368710b99387d012c1", "url": "https://api.github.com/repos/octokit/octokit.rb/contents/README.md", "git_url": "https://api.github.com/repos/octokit/octokit.rb/git/blobs/3d21ec53a331a6f037a91c368710b99387d012c1", "html_url": "https://github.com/octokit/octokit.rb/blob/master/README.md", "download_url": "https://raw.githubusercontent.com/octokit/octokit.rb/master/README.md", "_links": { "git": "https://api.github.com/repos/octokit/octokit.rb/git/blobs/3d21ec53a331a6f037a91c368710b99387d012c1", "self": "https://api.github.com/repos/octokit/octokit.rb/contents/README.md", "html": "https://github.com/octokit/octokit.rb/blob/master/README.md" } }
Если это каталог, он вернет все файлы и подкаталоги в массиве:
[ { "type": "file", "size": 625, "name": "octokit.rb", "path": "lib/octokit.rb", "sha": "fff6fe3a23bf1c8ea0692b4a883af99bee26fd3b", "url": "https://api.github.com/repos/octokit/octokit.rb/contents/lib/octokit.rb", "git_url": "https://api.github.com/repos/octokit/octokit.rb/git/blobs/fff6fe3a23bf1c8ea0692b4a883af99bee26fd3b", "html_url": "https://github.com/octokit/octokit.rb/blob/master/lib/octokit.rb", "download_url": "https://raw.githubusercontent.com/octokit/octokit.rb/master/lib/octokit.rb", "_links": { "self": "https://api.github.com/repos/octokit/octokit.rb/contents/lib/octokit.rb", "git": "https://api.github.com/repos/octokit/octokit.rb/git/blobs/fff6fe3a23bf1c8ea0692b4a883af99bee26fd3b", "html": "https://github.com/octokit/octokit.rb/blob/master/lib/octokit.rb" } }, { "type": "dir", "size": 0, "name": "octokit", "path": "lib/octokit", "sha": "a84d88e7554fc1fa21bcbc4efae3c782a70d2b9d", "url": "https://api.github.com/repos/octokit/octokit.rb/contents/lib/octokit", "git_url": "https://api.github.com/repos/octokit/octokit.rb/git/trees/a84d88e7554fc1fa21bcbc4efae3c782a70d2b9d", "html_url": "https://github.com/octokit/octokit.rb/tree/master/lib/octokit", "download_url": null, "_links": { "self": "https://api.github.com/repos/octokit/octokit.rb/contents/lib/octokit", "git": "https://api.github.com/repos/octokit/octokit.rb/git/trees/a84d88e7554fc1fa21bcbc4efae3c782a70d2b9d", "html": "https://github.com/octokit/octokit.rb/tree/master/lib/octokit" } } ]
Затем вы можете использовать анализатор JSON, например jq, чтобы получить URL-адрес и загрузить его. Чтобы рекурсивно получить список файлов репозитория, вам нужно получить корневое дерево.