
Git-Stats – A local GitHub-like contributions calendar - drtse4
https://github.com/IonicaBizau/git-stats
======
peterjmag
Cool! I was actually just looking for a tool like this a couple of weeks ago.
I stumbled across git-cal[1], which only works on one repository at a time,
but it doesn't require you to import your commits first like this one does[2].

Here's my output from both tools, generated from the repo I spend most of my
time in at work:
[http://i.imgur.com/chrmeP6.png](http://i.imgur.com/chrmeP6.png).

[1] [https://github.com/k4rthik/git-cal](https://github.com/k4rthik/git-cal)

[2] [https://github.com/IonicaBizau/git-stats#importing-and-
delet...](https://github.com/IonicaBizau/git-stats#importing-and-deleting-
commits)

EDIT: Just noticed that the "contributions" counts differ.

    
    
        peterjmag@peters-imac ~/checkouts/rg/community (git::master) 
        $ git rev-list HEAD --author="Peter" --since="1 year ago" --count
        1205
    

But git-stats shows 1292. What does it count as a contribution?

~~~
Amorymeltzer
Does one exclude merge commits while the other includes them?

~~~
k4rthik
Yes, git-cal excludes merge commits.

------
Cthulhu_
Name might be a bit confusing with the Gitstats project
([http://gitstats.sourceforge.net/](http://gitstats.sourceforge.net/))

~~~
omouse
They should connect and then integrate the calendar into gitstats, it looks
really useful and would be awesome to put into the gitstats report.

------
colomon
I'm only half-awake, so maybe I'm missing something obvious. Why is the README
talking about a git commit hook? Why not just take the data from the log?

~~~
michaelmior
It seems like for performance reasons, git-stats wants to update the calendar
on commit instead of generating it on the fly. git-cal[0] just does this on
the fly and works reasonably fast for me. The UI looks very comparable.

[0] [https://github.com/k4rthik/git-cal](https://github.com/k4rthik/git-cal)

~~~
colomon
Hmm, just installed git-cal and it certainly is adequately fast on my main
work repo. But it seems to just be for the current branch? (That seems
sensible enough, but also makes it somewhat less useful.)

~~~
k4rthik
Added an option to view stats from all branches ( git-cal --all ), but that'll
be slower for large repositories

~~~
colomon
Brill, it's still quite fast on my work repo, and much more useful to me. :)

------
arxpoetica
Funny. I was annoyed it was all private so I made mine public 11 days ago.
Nice coincidence.
[https://github.com/arxpoetica/commits](https://github.com/arxpoetica/commits)

------
qznc
Why do people care about this? I never understood why Github features things
like "longest commit streak" so prominently.

~~~
danadam
"Don't break the chain!" [http://lifehacker.com/281626/jerry-seinfelds-
productivity-se...](http://lifehacker.com/281626/jerry-seinfelds-productivity-
secret)

~~~
gknoy
I would love it if, for things like my work repo, I could count "Don't break
the chain of weekday commits" \-- I would prefer not to be penalized for not
working on the weekend. :)

------
pedrosanta
Cool, I always enjoy clever git visualisation tools. While you are immersed in
code it's hard to get a good grasp on what are your routines, or on what
you've accomplished, and these tools give you a nice picture of that - and
I've found them rather useful on retrospective or post-mortem moments.

One of the tools I use now an then is gource:

[https://code.google.com/p/gource](https://code.google.com/p/gource)

It puts you entire log on a neat graph like file structure with the
contributors firing out changes to nodes as time goes by.

------
josteink
Doesn't work for me on Windows. Keep getting a blank calendar: That is it has
dates and all but no commits.

~~~
jayrhynas
You have to import your commits first: [https://github.com/IonicaBizau/git-
stats#importing-and-delet...](https://github.com/IonicaBizau/git-
stats#importing-and-deleting-commits)

~~~
klapinat0r
Still doesn't work (for me, osx)

    
    
      user@host ~/tmp # npm install -g git-stats
      /usr/local/bin/git-stats -> /usr/local/lib/node_modules/git-stats/bin/git-stats
      git-stats@1.1.0 /usr/local/lib/node_modules/git-stats                                                                                                                                                       ├── ul@1.1.0
      ├── ansi-parser@1.4.0                                                                                                                                                                                       ├── cli-box@2.1.1 (ansi-parser@1.3.0)
      ├── moment@2.9.0                                                                                                                                                                                            ├── git-stats-colors@1.0.0 (couleurs@3.0.0)
      └── bug-killer@1.0.0 (couleurs@1.1.0)                                                                                                                                                                       user@host ~/tmp # npm install -g git-stats-importer                                                                                                                                                         /usr/local/bin/git-stats-importer -> /usr/local/lib/node_modules/git-stats-importer/bin/git-stats-importer
      git-stats-importer@1.3.0 /usr/local/lib/node_modules/git-stats-importer                                                                                                                                     ├── gry@1.0.0
      ├── async@0.9.0                                                                                                                                                                                             ├── oargv@1.2.0 (ul@1.1.0)
      ├── bug-killer@1.0.0 (couleurs@1.1.0)                                                                                                                                                                       └── git-stats@1.1.0 (ul@1.1.0, ansi-parser@1.4.0, git-stats-colors@1.0.0, cli-box@2.1.1, moment@2.9.0)
      user@host ~/tmp # git clone https://github.com/IonicaBizau/git-stats
      Cloning into 'git-stats'...                                                                                                                                                                                 remote: Counting objects: 414, done.
      remote: Total 414 (delta 0), reused 0 (delta 0)                                                                                                                                                             Receiving objects: 100% (414/414), 47.08 KiB | 0 bytes/s, done.
      Resolving deltas: 100% (189/189), done.                                                                                                                                                                     Checking connectivity... done.
      user@host ~/tmp : cd git-stats
      user@host ~/tmp/git-stats # git-stats-importer
      info  Done.
      user@host ~/tmp/git-stats # git stats
      ╔════════════════════════════════════════════════════════════════════════════════════════════════════════════════╗
      ║   Mar      Apr      May      Jun      Jul      Aug      Sep      Oct      Nov      Dec      Jan      Feb       ║
      ║Sun   ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ║
      ║Mon   ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ║
      ║Tue   ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■   ║
      ║Wed   ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■   ║
      ║Thu   ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■   ║
      ║Fri   ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■   ║
      ║Sat   ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■   ║
      ║--------------------------------------------------------------------------------------------------------------  ║
      ║Contributions in the last year: 0 | Longest Streak: 0 days | Current Streak: 0 days | Max a day: 0              ║
      ╚════════════════════════════════════════════════════════════════════════════════════════════════════════════════╝
      user@host ~/tmp/git-stats # cat $HOME/.git-stats
      {}

~~~
jayrhynas
git-stats-importer also only imports commits by the user set in the global
user.email config. Since you haven't made any commits to the git-stats repo,
it doesn't show anything.

Edit: it will use the local user.email if that is set. It also will use the
GIT_AUTHOR_EMAIL but only as a fallback if user.email is unset

~~~
klapinat0r
Ah, I see. A bit annoying when using more than one user.email across projects.
But git-cal works okay :)

Thanks for the info.

------
aendruk
There's an R package for producing nice images like this. Example of
visualizing Git contributions: [https://andrew.kvalhe.im/easy-calendar-
heatmaps-for-git/](https://andrew.kvalhe.im/easy-calendar-heatmaps-for-git/)

------
euphemize
Awesome stuff, I really like this for the following reason:

While I do push data to github for various projects, I actually take part in
3-4 active, self-hosted redmine projects that would never be counted in the
github graph. Same for a seldom-updated bitbucket project.

------
halosghost
I wish only that it weren't node…

~~~
halosghost
I find it funny that I was down-voted so for this. I haven't maligned the
project at all; in fact, I think it's incredibly cool, I'm just not a huge fan
of node.

~~~
tokenizerrr
I downvoted you because negative nonconstructive comments may as well not be
posted. They provide no tangible benefit to anyone who participates in the
discussion.

If you have a compelling reason as to why this project would be better done in
another language then it would be prudent to include this reason in your
original post. If all you're going off is personal preference then it may be
best to keep this to yourself.

~~~
halosghost
I understand your hope for comments to be constructive, and if you would like
to have a discussion about the negatives of Node, it seems like that might be
better on an article actually discussing that (though I will include them in
this post to sate your curiosity :P). Additionally, I did not wish to start a
flamewar (which always happens when you get into a discussion about the
relative merits of a language on the internet).

My reservations about Node stem from this kind of app actually; the creation
of a tool that goes far beyond the realistic and sensible use-case for Node.

That is, the huge benefit that Node offers is the ability to have both server-
and client-side scripting in the same language; that's awesome. However, it's
a fairly common bit of knowledge that JS is less than ideal for a wide variety
of reasons (e.g., no integers, breaking the commutative property, etc.). While
it may be a great alternative to PHP, it's still not that great of a language.
So, to go beyond the notion of just using it to unify the language for webapps
and to start creating userland applications on such a platform seems very
counterproductive to me.

In this case, I am especially taken by the fact that this author has made
three or four projects which all do similar things but for different use-
cases. If this project were made into, for example, a C library, all of the
derivative projects could just source that library and be simpler for it. Not
to mention the fact that other projects could interface with it as well.

Despite C's reputation as being rather hard to make portable code, a public
API with a C library actually makes it incredibly portable and extensible.

Again, I am completely okay with Node (I don't crusade against its existence),
it just saddens me to see such cool projects be based on such a platform when
there are obvious benefits to using something closer to the metal.

------
spidermanto
Good article, I like it.

------
cubitesystems
That's not what I need.

I need download stats, checkout stats, per page view stats and per file view
stats.

~~~
olalonde
This tool is designed to work with Git, not Github. The stats you are
referring to would need to be made available by Github.

~~~
halosghost
Actually, if you look at the project more closely, it does support github. In
fact, there's even a derivative project that directly interacts with github.
However, I think the point of this poster's comment was that this project's
scope doens't include ey's needs, not that it doesn't interface with a
particular service (I, of course, could be wrong in that interpretation).

