Determine the Size of Each Git Commit

Still need help?

The Atlassian Community is here for you.

Ask the community

This script will iterate over a Git repository and return information about the size of each commit.
foreach my $rev (`git rev-list --all --pretty=oneline`) {
  my $tot = 0;
  ($sha = $rev) =~ s/\s.*$//;
  foreach my $blob (`git diff-tree -r -c -M -C --no-commit-id $sha`) {
    $blob = (split /\s/, $blob)[3];
    next if $blob == "0000000000000000000000000000000000000000"; # Deleted
    my $size = `echo $blob | git cat-file --batch-check`;
    $size = (split /\s/, $size)[2];
    $tot += int($size);
  my $revn = substr($rev, 0, 40);
  if ($tot > 1000000) {
    print "$tot $revn " . `git show --pretty="format:" --name-only $revn | wc -l`  ;

This may take a long time on a large repository.

Download the script file:

Last modified on Jul 11, 2012

Was this helpful?

Provide feedback about this article
Powered by Confluence and Scroll Viewport.