Is there a way to see how big a Git repository is on GitHub before you decide to clone it?
This seems like a really obvious/basic statistic, but I can't find how to see it on GitHub at all.
Is there a way to see how big a Git repository is on GitHub before you decide to clone it?
This seems like a really obvious/basic statistic, but I can't find how to see it on GitHub at all.
There's a way to access this information through the GitHub API.
GET /repos/:user/:repo
When retrieving information about a repository, a property named size
is valued with the size of the whole repository (including all of its history), in kilobytes.
For instance, the Git repository weights around 124 MB. The size
property of the returned JSON payload is valued to 124283
.
The size is indeed expressed in kilobytes based on the disk usage of the server-side bare repository. However, in order to avoid wasting too much space with repositories with a large network, GitHub relies on Git Alternates. In this configuration, calculating the disk usage against the bare repository doesn't account for the shared object store and thus returns an "incomplete" value through the API call.
This information has been given by GitHub support.
$ curl -u "{:username}" https://api.github.com/repos/{:organization}/{:repository}
. See developer.github.com/v3/#authentication –
Confuse php/php-src
repo is reported to be "size": 362064,
, while my file manager says it's 501 MB. looks like it's KB. –
Prebo If you own the repository, you can find the exact size by opening your Account Settings → Repositories (https://github.com/settings/repositories), and the repository size is displayed next to its designation.
If you do not own the repository, you can fork it and then check the in the same place.
Note: You might be the owner of the organization that hosts multiple repositories and yet not have a role in a specific repository inside the organization. By default, even if you create a repository in the organization you own, you are not added to the repo and hence not see that repo in settings/repositories
. So add yourself in the repository Setting(https://github.com/org-name/repo-name/settings
) to see it in https://github.com/settings/repositories
Somewhat hacky: use the download as a zip file
option, read the file size indicated and then cancel it.
I do not remember if downloading as a zip ever worked, but in any case, doing so now only downloads the currently selected branch with no history.
Settings > Repositories
, but instead found the repo size under Account Settings > Repositories
off of your git home page. Of course, this only works with repos that you own (or fork). –
Devorahdevore If you use Google Chrome browser you can install the GitHub Repository Size extension.
Repo here: https://github.com/harshjv/github-repo-size
@larowlan great sample code. With the new GitHub API V3, the curl statement needs to be updated. Also, the login is no longer required:
curl https://api.github.com/repos/$2/$3 2> /dev/null | grep size | tr -dc '[:digit:]'
For example:
curl https://api.github.com/repos/dotnet/roslyn 2> /dev/null | grep size | tr -dc '[:digit:]'
returns 931668
(in KB), which is almost a GB.
A private repo requires authentication. One way is with a GitHub Personal Access token:
curl -u myusername:$PERSONAL_ACCESS_TOKEN https://api.github.com/repos/$2/$3 2> /dev/null | grep size | tr -dc '[:digit:]'
From a browser, with JavaScript, since the Github API is CORS enabled:
fetch('https://api.github.com/repos/webdev23/source_control_sentry')
.then(v => v.json()).then((v) => {
console.log(v['size'] + 'KB')
}
)
{ "message": "Not Found", "documentation_url": "https://docs.github.com/rest/reference/repos#get-a-repository" }
–
Kassel fetch('https://api.github.com/repos/webdev23/source_control_sentry') .then(v => v.json()).then((v) => { console.log(Math.round((v['size'] / 1024)*100)/100 + ' Mb') } )
–
Failing All you have to do is go to GitHub settings repositories and you see all the sizes right there in the browser no extra work needed.
To do this with curl (sudo apt-get curl) and json pretty (sudo gem install jsonpretty json):
curl -u "YOURGITHUBUSERNAME" http://github.com/api/v2/json/repos/show/OWNER/REPOSITORY |
jsonpretty
Replace YOURGITHUBUSERNAME with your GitHub username (go figure).
Replace OWNER with the repository owner's Git username. Replace REPOSITORY with the repository name.
Or as a nice Bash script (paste this in a file named gitrepo-info):
#!/bin/bash
if [ $# -ne 3 ]
then
echo "Usage: gitrepo-info <username> <owner> <repo>"
exit 65
fi
curl -u "$1" http://github.com/api/v2/json/repos/show/$2/$3|jsonpretty
Use it like so:
gitrepo-info larowlan pisi reel
This will give me information on the pisi/reel repository on GitHub.
As shown in other answers, it's possible to get a size via api.github.com
. It's in the size
property of a JSON object returned.
To get it, just add to your repo URL an additional subdomain api
and extend the repo path with /repos
:
# For public repos ->
# Repo example: Axios
# Repo URL: https://github.com/axios/axios
⤵ ⤵
curl https://api.github.com/repos/axios/axios
# For private repos ->
# Repo example: My-repo
# Repo URL: https://github.com/my-org/my-repo
curl https://{username}:{api-token}@api.github.com/repos/{orgname}/{reponame}
As it's only URL, you can fetch data using any programming language.
The response will be like:
// Much more props inside
{
"id": 23088740,
"name": "axios",
"full_name": "axios/axios",
"private": false,
"size": 4396,
"default_branch": "v1.x",
"visibility": "public",
"network_count": 9581,
"subscribers_count": 1213
}
The most important to us is size
. It's in Kb
now, but it could be changed in the future (as it was already).
But... I tested it a lot of times, and see that real size of repo and the size shown with the above mechanism are too different.
Let's give the same axios
repo:
4396
Kb -> ~4.29
MbWhat if clone a full repo:
clone repo.git
commanddu -sh ./axios
8.0
Mb.git
folder from inside2.6
Mbnot good, as
size
~4.29
Mb is not8
or2.6
Mb either
What if clone only the latest commit:
--depth 1
flag, like clone repo --depth 1
du -sh ./axios
3.2
Mb (that's close
).git
folder from inside2.6
Mbnot good, as
size
~4.29
Mb is not3.2
or2.6
Mb either
What if clone only one branch:
default_branch
. Let's clone-b v1.x --single-branch
flagsdu -sh ./axios
7.5
Mb (that's close
).git
folder from inside gives the same 2.6
Mbstill not good, as
size
~4.29
Mb is not7.5
or2.6
Mb either
Thus, the size
param shows something, that is close to the latest commit, but it's not the strongly right size of the repo.
I have shown above how it works with
axios
repo, but tests with different repos show the same results.
That's from my experience.
du
–
Icelandic If you have the official GitHub CLI installed, you can do the following:
gh api repos/<org>/<repo> --jq '.size'
I think it reports the size in KBs.
You need to follow the GitHub API. See the documentation here for all the details regarding your repository. It requires you to make a GET request as:
GET /repos/:owner/:repository
You need to replace two things:
E.g., my username maheshmnj, and I own a repository, flutter-ui-nice, so my GET URL will be:
https://api.github.com/repos/maheshmnj/flutter-ui-nice
On making a GET request, you will be flooded with some JSON data and probably on line number 78 you should see a key named size that will return the size of the repository.
Tip: When working with JSON I suggest you to add a plugin that formats the JSON data to make reading JSON easy. Install the plugin.
size
key in the response, not line 78. Not to mention, different formatters will have different line breaks in different places, leaving desired data at a different line number. –
Wallis probably
see it on line no 78,so that indicates you should see the size key somewhere around 78, second thing if the size from the github apis was not accurate,I dont think you will find something more accurate than github apis. –
Rattray You can do it using the Github API
This is the Python example:
import requests
if __name__ == '__main__':
base_api_url = 'https://api.github.com/repos'
git_repository_url = 'https://github.com/garysieling/wikipedia-categorization.git'
github_username, repository_name = git_repository_url[:-4].split('/')[-2:] # garysieling and wikipedia-categorization
res = requests.get(f'{base_api_url}/{github_username}/{repository_name}')
repository_size = res.json().get('size')
print(repository_size)
I created a bookmarklet script to do this using the method from NVRM's Answer.
To use it, create a new bookmark, give it name, and paste this script into the URL field. Clicking on this bookmark while browsing a repo pops an alert with that repo's size in both megabytes and kilobytes.
javascript:(()=>{let url=new URL(document.location.href);if(url.origin!="https://github.com"){return}if(url.pathname=="/"){return}let p=url.pathname.slice(1,url.pathname.length);let parts=p.split('/');if(parts.length<2){return}let x=[parts[0],parts[1]].join('/');fetch(`https://api.github.com/repos/${x}`).then(r=>r.json()).then((b)=>alert(`${(b['size']/1000).toFixed(2)}mb (${b['size']}kb)`))})()
To summarize @larowlan, @VMTrooper, and @vahid chakoshy solutions:
#!/usr/bin/env bash
if [ "$#" -eq 2 ]; then
echo "$(echo "scale=2; $(curl https://api.github.com/repos/$1/$2 2>/dev/null \
| grep size | head -1 | tr -dc '[:digit:]') / 1024" | bc)MB"
elif [ "$#" -eq 3 ] && [ "$1" == "-z" ]; then
# For some reason Content-Length header is returned only on second try
curl -I https://codeload.github.com/$2/$3/zip/master &>/dev/null
echo "$(echo "scale=2; $(curl -I https://codeload.github.com/$2/$3/zip/master \
2>/dev/null | grep Content-Length | cut -d' ' -f2 | tr -d '\r') / 1024 / 1024" \
| bc)MB"
else
printf "Usage: $(basename $0) [-z] OWNER REPO\n\n"
printf "Get github repository size or, optionally [-z], the size of the zipped\n"
printf "master branch (`Download ZIP` link on repo page).\n"
exit 1
fi
For a private repository, you will need to obtain a Personal Access Token from https://github.com/settings/tokens.
Then use the following curl command to get the details (substituting in values for [token], [owner] and [name]):
curl -u git:[token] https://api.github.com/repos/[owner]/[name] 2> /dev/null | grep size
As mentioned earlier, size may be in MB or KB.
Simply type: https://api.github.com/repos/orgname_ifany/repo_name on the browser
It'll provide you with a JSON response and find the rep_size in the size property.
Which is roughly equal to 1.07 GB
© 2022 - 2024 — McMap. All rights reserved.