Git Download Repository Example
1. Introduction
In this post, we feature a comprehensive Git Download Repository Example. Git is an open source distributed version control system designed to handle everything from small to large projects with speed and efficiency. It was first released on 12-15-2005. There are lots of Git Hosting Services available today. GitHub is one of the most popular ones. In this article, I will demonstrate three ways to download a repository from GitHub. The three ways are:
- Git clone command
- Download via
GitHub
- IDE with Git Support
2. Technologies and Tools Used
The technologies and tools used in this article are:
- Git 2.16.*
- Eclipse Mars
- IntelliJ IDEA 14.*
- GitHub
3. Git Clone Command
If you have not yet installed Git, click here to do so. Git clone command is used to clone a repository from one location to another. Here is the syntax of the clone command:
git clone
git clone [--template=<template_directory>] [-l] [-s] [--no-hardlinks] [-q] [-n] [--bare] [--mirror] [-o <name>] [-b <name>] [-u <upload-pack>] [--reference <repository>] [--dissociate] [--separate-git-dir <git dir>] [--depth <depth>] [--[no-]single-branch] [--no-tags] [--recurse-submodules[=<pathspec>]] [--[no-]shallow-submodules] [--jobs <n>] [--] <repository> [<directory>]
Please click here for more details about the clone
command. In this step, we will clone a repository from https://github.com/maryzheng01/Deadlock-demo:
- Navigate to
C:\Users\shu.shan\GIT_WORK
- Enter
git clone https://github.com/maryzheng01/Deadlock-demo
Commands Outputs
Microsoft Windows [Version 6.1.7601] Copyright (c) 2009 Microsoft Corporation. All rights reserved. C:\Users\shu.shan>cd \ C:\>cd GIT_WORK\ C:\GIT_WORK>dir Volume in drive C is OSDisk Volume Serial Number is 3A10-C6D4 Directory of C:\GIT_WORK 05/19/2018 08:05 AM <DIR> . 05/19/2018 08:05 AM <DIR> .. 05/16/2018 03:04 PM <DIR> change-saints 02/09/2018 10:31 AM <DIR> rest-service-springboot-archetype 02/09/2018 11:31 AM <DIR> rest-service-template 0 File(s) 0 bytes 5 Dir(s) 59,034,894,336 bytes free C:\GIT_WORK>git clone https://github.com/maryzheng01/Deadlock-demo.git Cloning into 'Deadlock-demo'... remote: Counting objects: 110, done. remote: Compressing objects: 100% (38/38), done. remote: Total 110 (delta 14), reused 50 (delta 4), pack-reused 50 Receiving objects: 100% (110/110), 19.31 KiB | 988.00 KiB/s, done. Resolving deltas: 100% (22/22), done. C:\GIT_WORK>dir Volume in drive C is OSDisk Volume Serial Number is 3A10-C6D4 Directory of C:\GIT_WORK 05/31/2018 12:37 PM <DIR> . 05/31/2018 12:37 PM <DIR> .. 05/16/2018 03:04 PM <DIR> change-saints 05/31/2018 12:37 PM <DIR> Deadlock-demo 02/09/2018 10:31 AM <DIR> rest-service-springboot-archetype 02/09/2018 11:31 AM <DIR> rest-service-template 0 File(s) 0 bytes 6 Dir(s) 59,034,976,256 bytes free C:\GIT_WORK>
The clone command downloaded a zip file to C:\Users\shu.shan\GIT_WORK\Deadlock-demo
which contains all the files in the repository hosted at https://github.com/maryzheng01/Deadlock-demo
.
4. Download via GitHub
GitHub is a popular web-based Git repository hosting service. GitHub has three ways to download a repository:
- Download via the GitHub web site
- Download via the GitHub desktop application
- Download via the GitHub API
4.1 GitHub Web site
GitHub web site provides a button to download a repository. In this step, I will download a repository through the GitHub web site:
- Open a browser and go to https://github.com/maryzheng01/Deadlock-demo.
- Select the desired branch, e.g. master.
- Click
Clone or download
, and then clickDownload ZIP
.
It will download a zip file which contains all the files in the repository.
4.2 GitHub Desktop Application
GitHub desktop application allows users to download/synchronize a repository. In this step, I will show you how to clone a repository from GitHub desktop application.
- Open GitHub desktop application
- Login with your GitHub credential
- Click
Clone
and enter the repository location
GitHub desktop also provides a Pull request
button to download any differences from a remote repository after the initial download. The user just need to select the branch name and click the Send pull request
button.
4.3 GitHub API
GitHub provides a content API to download the repository’s content. In this example, I will show you how to download from a GitHub repository.
Based on the GitHub API definition, the repository’s URL is defined as https://api.github.com/users/{username}/repos
. For this example, I will download my repository from https://api.github.com/users/maryzheng01/repos because my GitHub user name is maryzheong01
.
Open a browser and navigate to https://api.github.com/users/maryzheng01/repos. It will return a Json
array with the repository’s information. I only have one repository, so we will only see one repository. We will capture the repository’s content_url
from the highlighted row.
Maryzheng01 Repo Response Data
[ { "id": 33957535, "node_id": "MDEwOlJlcG9zaXRvcnkzMzk1NzUzNQ==", "name": "Deadlock-demo", "full_name": "maryzheng01/Deadlock-demo", "owner": { "login": "maryzheng01", "id": 11510587, "node_id": "MDQ6VXNlcjExNTEwNTg3", "avatar_url": "https://avatars2.githubusercontent.com/u/11510587?v=4", "gravatar_id": "", "url": "https://api.github.com/users/maryzheng01", "html_url": "https://github.com/maryzheng01", "followers_url": "https://api.github.com/users/maryzheng01/followers", "following_url": "https://api.github.com/users/maryzheng01/following{/other_user}", "gists_url": "https://api.github.com/users/maryzheng01/gists{/gist_id}", "starred_url": "https://api.github.com/users/maryzheng01/starred{/owner}{/repo}", "subscriptions_url": "https://api.github.com/users/maryzheng01/subscriptions", "organizations_url": "https://api.github.com/users/maryzheng01/orgs", "repos_url": "https://api.github.com/users/maryzheng01/repos", "events_url": "https://api.github.com/users/maryzheng01/events{/privacy}", "received_events_url": "https://api.github.com/users/maryzheng01/received_events", "type": "User", "site_admin": false }, "private": false, "html_url": "https://github.com/maryzheng01/Deadlock-demo", "description": "initial check in", "fork": false, "url": "https://api.github.com/repos/maryzheng01/Deadlock-demo", "forks_url": "https://api.github.com/repos/maryzheng01/Deadlock-demo/forks", "keys_url": "https://api.github.com/repos/maryzheng01/Deadlock-demo/keys{/key_id}", "collaborators_url": "https://api.github.com/repos/maryzheng01/Deadlock-demo/collaborators{/collaborator}", "teams_url": "https://api.github.com/repos/maryzheng01/Deadlock-demo/teams", "hooks_url": "https://api.github.com/repos/maryzheng01/Deadlock-demo/hooks", "issue_events_url": "https://api.github.com/repos/maryzheng01/Deadlock-demo/issues/events{/number}", "events_url": "https://api.github.com/repos/maryzheng01/Deadlock-demo/events", "assignees_url": "https://api.github.com/repos/maryzheng01/Deadlock-demo/assignees{/user}", "branches_url": "https://api.github.com/repos/maryzheng01/Deadlock-demo/branches{/branch}", "tags_url": "https://api.github.com/repos/maryzheng01/Deadlock-demo/tags", "blobs_url": "https://api.github.com/repos/maryzheng01/Deadlock-demo/git/blobs{/sha}", "git_tags_url": "https://api.github.com/repos/maryzheng01/Deadlock-demo/git/tags{/sha}", "git_refs_url": "https://api.github.com/repos/maryzheng01/Deadlock-demo/git/refs{/sha}", "trees_url": "https://api.github.com/repos/maryzheng01/Deadlock-demo/git/trees{/sha}", "statuses_url": "https://api.github.com/repos/maryzheng01/Deadlock-demo/statuses/{sha}", "languages_url": "https://api.github.com/repos/maryzheng01/Deadlock-demo/languages", "stargazers_url": "https://api.github.com/repos/maryzheng01/Deadlock-demo/stargazers", "contributors_url": "https://api.github.com/repos/maryzheng01/Deadlock-demo/contributors", "subscribers_url": "https://api.github.com/repos/maryzheng01/Deadlock-demo/subscribers", "subscription_url": "https://api.github.com/repos/maryzheng01/Deadlock-demo/subscription", "commits_url": "https://api.github.com/repos/maryzheng01/Deadlock-demo/commits{/sha}", "git_commits_url": "https://api.github.com/repos/maryzheng01/Deadlock-demo/git/commits{/sha}", "comments_url": "https://api.github.com/repos/maryzheng01/Deadlock-demo/comments{/number}", "issue_comment_url": "https://api.github.com/repos/maryzheng01/Deadlock-demo/issues/comments{/number}", "contents_url": "https://api.github.com/repos/maryzheng01/Deadlock-demo/contents/{+path}", "compare_url": "https://api.github.com/repos/maryzheng01/Deadlock-demo/compare/{base}...{head}", "merges_url": "https://api.github.com/repos/maryzheng01/Deadlock-demo/merges", "archive_url": "https://api.github.com/repos/maryzheng01/Deadlock-demo/{archive_format}{/ref}", "downloads_url": "https://api.github.com/repos/maryzheng01/Deadlock-demo/downloads", "issues_url": "https://api.github.com/repos/maryzheng01/Deadlock-demo/issues{/number}", "pulls_url": "https://api.github.com/repos/maryzheng01/Deadlock-demo/pulls{/number}", "milestones_url": "https://api.github.com/repos/maryzheng01/Deadlock-demo/milestones{/number}", "notifications_url": "https://api.github.com/repos/maryzheng01/Deadlock-demo/notifications{?since,all,participating}", "labels_url": "https://api.github.com/repos/maryzheng01/Deadlock-demo/labels{/name}", "releases_url": "https://api.github.com/repos/maryzheng01/Deadlock-demo/releases{/id}", "deployments_url": "https://api.github.com/repos/maryzheng01/Deadlock-demo/deployments", "created_at": "2015-04-14T21:17:27Z", "updated_at": "2018-05-19T13:48:08Z", "pushed_at": "2018-05-24T21:35:45Z", "git_url": "git://github.com/maryzheng01/Deadlock-demo.git", "ssh_url": "git@github.com:maryzheng01/Deadlock-demo.git", "clone_url": "https://github.com/maryzheng01/Deadlock-demo.git", "svn_url": "https://github.com/maryzheng01/Deadlock-demo", "homepage": null, "size": 21, "stargazers_count": 0, "watchers_count": 0, "language": "Java", "has_issues": true, "has_projects": true, "has_downloads": true, "has_wiki": true, "has_pages": false, "forks_count": 0, "mirror_url": null, "archived": false, "open_issues_count": 0, "license": null, "forks": 0, "open_issues": 0, "watchers": 0, "default_branch": "master" } ]
Navigate to the Deadlock-demo
‘s content_url
: https://api.github.com/repos/maryzheng01/Deadlock-demo/contents/. It will display an array of objects. The highlighted rows contain the url to download the file and content url to get encoded content.
Maryzheng01 Content API Response
[ { "name": ".gitattributes", "path": ".gitattributes", "sha": "bdb0cabc87cf50106df6e15097dff816c8c3eb34", "size": 378, "url": "https://api.github.com/repos/maryzheng01/Deadlock-demo/contents/.gitattributes?ref=master", "html_url": "https://github.com/maryzheng01/Deadlock-demo/blob/master/.gitattributes", "git_url": "https://api.github.com/repos/maryzheng01/Deadlock-demo/git/blobs/bdb0cabc87cf50106df6e15097dff816c8c3eb34", "download_url": "https://raw.githubusercontent.com/maryzheng01/Deadlock-demo/master/.gitattributes", "type": "file", "_links": { "self": "https://api.github.com/repos/maryzheng01/Deadlock-demo/contents/.gitattributes?ref=master", "git": "https://api.github.com/repos/maryzheng01/Deadlock-demo/git/blobs/bdb0cabc87cf50106df6e15097dff816c8c3eb34", "html": "https://github.com/maryzheng01/Deadlock-demo/blob/master/.gitattributes" } }, { "name": ".gitignore", "path": ".gitignore", "sha": "3599352fbd68470467949b5c7e6ad64a7be59cb3", "size": 631, "url": "https://api.github.com/repos/maryzheng01/Deadlock-demo/contents/.gitignore?ref=master", "html_url": "https://github.com/maryzheng01/Deadlock-demo/blob/master/.gitignore", "git_url": "https://api.github.com/repos/maryzheng01/Deadlock-demo/git/blobs/3599352fbd68470467949b5c7e6ad64a7be59cb3", "download_url": "https://raw.githubusercontent.com/maryzheng01/Deadlock-demo/master/.gitignore", "type": "file", "_links": { "self": "https://api.github.com/repos/maryzheng01/Deadlock-demo/contents/.gitignore?ref=master", "git": "https://api.github.com/repos/maryzheng01/Deadlock-demo/git/blobs/3599352fbd68470467949b5c7e6ad64a7be59cb3", "html": "https://github.com/maryzheng01/Deadlock-demo/blob/master/.gitignore" } }, { "name": "README.md", "path": "README.md", "sha": "12caff302f3689c40e2bd11104e317aafb85bb1b", "size": 277, "url": "https://api.github.com/repos/maryzheng01/Deadlock-demo/contents/README.md?ref=master", "html_url": "https://github.com/maryzheng01/Deadlock-demo/blob/master/README.md", "git_url": "https://api.github.com/repos/maryzheng01/Deadlock-demo/git/blobs/12caff302f3689c40e2bd11104e317aafb85bb1b", "download_url": "https://raw.githubusercontent.com/maryzheng01/Deadlock-demo/master/README.md", "type": "file", "_links": { "self": "https://api.github.com/repos/maryzheng01/Deadlock-demo/contents/README.md?ref=master", "git": "https://api.github.com/repos/maryzheng01/Deadlock-demo/git/blobs/12caff302f3689c40e2bd11104e317aafb85bb1b", "html": "https://github.com/maryzheng01/Deadlock-demo/blob/master/README.md" } }, { "name": "pom.xml", "path": "pom.xml", "sha": "653adfab73fda0d7a88a6645b750a6060048ea85", "size": 2102, "url": "https://api.github.com/repos/maryzheng01/Deadlock-demo/contents/pom.xml?ref=master", "html_url": "https://github.com/maryzheng01/Deadlock-demo/blob/master/pom.xml", "git_url": "https://api.github.com/repos/maryzheng01/Deadlock-demo/git/blobs/653adfab73fda0d7a88a6645b750a6060048ea85", "download_url": "https://raw.githubusercontent.com/maryzheng01/Deadlock-demo/master/pom.xml", "type": "file", "_links": { "self": "https://api.github.com/repos/maryzheng01/Deadlock-demo/contents/pom.xml?ref=master", "git": "https://api.github.com/repos/maryzheng01/Deadlock-demo/git/blobs/653adfab73fda0d7a88a6645b750a6060048ea85", "html": "https://github.com/maryzheng01/Deadlock-demo/blob/master/pom.xml" } }, { "name": "src", "path": "src", "sha": "365efa9c6603654aa7b2a03ac983a873eb28a0e5", "size": 0, "url": "https://api.github.com/repos/maryzheng01/Deadlock-demo/contents/src?ref=master", "html_url": "https://github.com/maryzheng01/Deadlock-demo/tree/master/src", "git_url": "https://api.github.com/repos/maryzheng01/Deadlock-demo/git/trees/365efa9c6603654aa7b2a03ac983a873eb28a0e5", "download_url": null, "type": "dir", "_links": { "self": "https://api.github.com/repos/maryzheng01/Deadlock-demo/contents/src?ref=master", "git": "https://api.github.com/repos/maryzheng01/Deadlock-demo/git/trees/365efa9c6603654aa7b2a03ac983a873eb28a0e5", "html": "https://github.com/maryzheng01/Deadlock-demo/tree/master/src" } } ]
- lines 7, 23, 43, 55, 71: We can use the
url
to get the file content as abase64
encoded value. - lines 10, 26, 42, 58, 74: We can use
download_url
to download a file. - lines 11, 27, 43, 59, 75: Shows whether or not the object is a file or a directory.
Navigate to the download_url
: https://raw.githubusercontent.com/maryzheng01/Deadlock-demo/master/README.md. It will display the file content.
README.md
This is a Maven project to demo: 1) how to use Spring JDBC XML configuration to connect to two data sources. 2) how to use the Transaction manager to avoid the deadlock. 2.1) Guard the Transaction at each Dao method level 2.2) Guard the Transaction at the service level
Navigate to the url
: https://api.github.com/repos/maryzheng01/Deadlock-demo/contents/README.md?ref=master. It will display the file content as a base64
encoded value.
README Encoded Content
{ "name": "README.md", "path": "README.md", "sha": "12caff302f3689c40e2bd11104e317aafb85bb1b", "size": 277, "url": "https://api.github.com/repos/maryzheng01/Deadlock-demo/contents/README.md?ref=master", "html_url": "https://github.com/maryzheng01/Deadlock-demo/blob/master/README.md", "git_url": "https://api.github.com/repos/maryzheng01/Deadlock-demo/git/blobs/12caff302f3689c40e2bd11104e317aafb85bb1b", "download_url": "https://raw.githubusercontent.com/maryzheng01/Deadlock-demo/master/README.md", "type": "file", "content": "ClRoaXMgaXMgYSBNYXZlbiBwcm9qZWN0IHRvIGRlbW86CjEpIGhvdyB0byB1\nc2UgU3ByaW5nIEpEQkMgWE1MIGNvbmZpZ3VyYXRpb24gdG8gY29ubmVjdCB0\nbyB0d28gZGF0YSBzb3VyY2VzLgoyKSBob3cgdG8gdXNlIHRoZSBUcmFuc2Fj\ndGlvbiBtYW5hZ2VyIHRvIGF2b2lkIHRoZSBkZWFkbG9jay4KICAgMi4xKSBH\ndWFyZCB0aGUgVHJhbnNhY3Rpb24gYXQgZWFjaCBEYW8gbWV0aG9kIGxldmVs\nCiAgIDIuMikgR3VhcmQgdGhlIFRyYW5zYWN0aW9uIGF0IHRoZSBzZXJ2aWNl\nIGxldmVsCg==\n", "encoding": "base64", "_links": { "self": "https://api.github.com/repos/maryzheng01/Deadlock-demo/contents/README.md?ref=master", "git": "https://api.github.com/repos/maryzheng01/Deadlock-demo/git/blobs/12caff302f3689c40e2bd11104e317aafb85bb1b", "html": "https://github.com/maryzheng01/Deadlock-demo/blob/master/README.md" } }
5. IDE with Git Support
Common IDEs, such as Visual Studio, Eclipse, NetBeans, IntelliJ IDEA, etc, support Git from the box. In this step, we will download a repository from https://github.com/maryzheng01/Deadlock-demo via Eclipse
and IntelliJ IDEA
.
5.1 IntelliJ IDEA
IntelliJ IDEA supports Git. There are only few steps to download a repository:
- Open
IntelliJ IDEA
. - Select
Git
from the drop down list ofCheck out from Version Control
. - Enter the
Git Repository URL
and theParent Directory
. - Click
Clone
. - Verify that the project is downloaded to the location specified.
5.2 EGit
Eclipse supports Git. There are two basic steps to download a repository:
- Open
Eclipse
as aGit Perspective
. - Click the icon to clone from a remote repository.
Please check out my other article here for more details.
6. Summary
In this example, I showed how to download a remote repository hosted at GitHub via the Git clone command, Eclipse, IntelliJ IDEA, GitHub web sites, GitHub desktop application, and GitHub API. Please note that Git clone command, Eclipse, and IntelliJ IDEA can download repositories from any Git Hosting services.