My product (https://gitsense.com) moves most of Git's history into a Postgres database and from there, you can execute the following SQL statement:
select
commit_ym AS month,
count(distinct(author_email)) as authors,
count(distinct(commit_id)) as commits,
count(distinct(path_id)) as files,
sum(total) as churn
from
z1_commits_422 as commits,
z1_changes_422 as changes,
z1_code_churn_422 as churn
where
commits.id=changes.commit_id and
changes.code_churn_id=churn.id and
lang='java'
group by commit_ym
order by commit_ym desc
limit 12
By having most of Git's history in SQL, I can slice, dice and cross-reference code history, which is how my product works.