Paul Hammant's Blog: Introducing 'git size' (command and visualization)
I’m trying to slim things down - it’s easy to fill a 256GB hard drive on a Mac when you like poking around other people’s source on Github. And, perhaps, 100 of your own repos.
I wrote two commands for Git in bash to supplement Git.
As run on my Mac (after I zapped 50GB of git repos):
The ‘git size’ sub-command: https://github.com/paul-hammant/git-size (~patches~ PRs welome).
$ git size jbehave/jbehave-core/ jbehave/jbehave-core: git size: .git folder: 31M checkout: 11.6M ignored: 8.1M total: 50M
Or, recursive and CSV:
$ git size --csv --csv-headers --recursive . directory_name,dot_git_folder_size,checkout_size,ignored_size,total_size "jbehave/jbehave-core",31320,11924,8344,51588 "jbehave/jbehave-tutorial",728,220,0,948 "jbehave/jbehave-web",1772,1396,920,4088 "maven-hpi-plugin",1784,620,1328,3732 "xunit-plugin",1416,3588,14928,19932
How to install that on a Mac with Homebrew (so you can just do ‘git size’ like other git commands): github.com/paul-hammant/homebrew-tap#git-size
The site for visualizations: https://paul-hammant.github.io/git-size/. It is the gh-pages branch of the
git-size repo, of course.
That pic is the example linked to from the homepage, above. The link itself (so you can see):
https://paul-hammant.github.io/git-size/total.html#ImpiZWhhdmUvamJlaGF2ZS1jb3JlIiwzMTMyMCwx MTkyNCw4MzQ0LDUxNTg4CiJqYmVoYXZlL2piZWhhdmUtdHV0b3JpYWwiLDcyOCwyMjAsMCw5NDgKImpiZWhhdmUvamJl aGF2ZS13ZWIiLDE3NzIsMTM5Niw5MjAsNDA4OAoibWF2ZW4taHBpLXBsdWdpbiIsMTc4NCw2MjAsMTMyOCwzNzMyCiJ4 dW5pdC1wbHVnaW4iLDE0MTYsMzU4OCwxNDkyOCwxOTkzMgo=
Yes, that’s a long URL. It’s OK the browser can handle it. Note too, that the stuff to the right of the # will not being sent to the Github web-server hosting the files. The stuff to the right of the # is an base64 encoded form of the CSV above, or course.
This might be buggy, but it works for me - a way to reduce the depth of a clone in-situ.
The ‘git slim’ sub-command: https://github.com/paul-hammant/git-slim
$ cd jbehave/jbehave-core $ git slim Size of .git folder before: 31M, best case size after: 3.4M (approx).
How to install that on a Mac (so you can just do ‘git slim’ as any git command): github.com/paul-hammant/homebrew-tap#git-slim
Thoughts after making these
Bash is quite picky generally, but there’s a particular snafu that bogged me down quite a bit:
xargs can blow up when using it to calculate the size of a list of files. I had to drop it, and iterate over files adding up KB sizes. There’s a
-a option but it’s not available installed on base OS X.
I could have installed GNU’s
xargs like so
brew install findutils, but it would be
gxargs instead of xargs and though still possible, it would be harder to keep
git-size Linux compatible.
The D3-using sunburst chart really has to stay online - it is too much for a simple bash-script to handle. It is also a fork of something pre-existing, and I had trouble making it into a single page that could switch between the four size types passed in via CSV (the four radio buttons at the top).