Поиск по сайту:

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