Swift Headline
Latest News and Updates

How To Download Single Files From a Github Repository – CloudSavvy IT

While Github is most commonly used to host large code projects, it also functions as a pretty good file host, and sometimes you just want to download a file or two without cloning the entire repo. Github supports this, both from the site and command line.

Downloading a Single File From The Github Website

If you’re fine using your web browser, you can download single files pretty easily. Head over to the file you want to download and click “Raw:”

This will open up a page with a direct link to the file. You can copy/paste from here, but in most browsers, you should be able to right click and select “Save As” to download the file directly.

For code files, it may try to save as .txt, which you will need to fix manually before or after downloading.

Downloading From The Command Line

Since files served from raw.githubusercontent.com, you can download them directly through wget or curl. They’re stored in accessible locations, so if you know the username, repository, and file path, you can download any file on any branch like so:

wget https://raw.githubusercontent.com/username/repository/branch/path/filename.md

If you’d rather use Git’s API, you can interact with it more directly, and download files when you aren’t sure of the exact file location. You will need to create a personal access token to use the API, with which you can replace “ACCESS_TOKEN” in this script.

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

The /repos/{user}/{repo}/contents endpoint will do a different things depending on whether the path points to a directory or a file. If it’s a file, it will return metadata about that file:

{
  "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"
  }
}

If it’s a directory, it will return all the files and subdirectories in an array:

[
  {
    "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"
    }
  }
]

You can then use a JSON parser like jq to pull out the URL and download it. To get the repository file list recursively, you will need to fetch the root tree.

RELATED: How to Work With JSON On the Command Line

Read original article here

Denial of responsibility! Swiftheadline is an automatic aggregator around the global media. All the content are available free on Internet. We have just arranged it in one platform for educational purpose only. In each content, the hyperlink to the primary source is specified. All trademarks belong to their rightful owners, all materials to their authors. If you are the owner of the content and do not want us to publish your materials on our website, please contact us by email – admin@swiftheadline.com. The content will be deleted within 24 hours.

Leave a comment