Obtendo tamanhos de commit no Git?

5

Existe uma maneira de descobrir quanto espaço foi usado por cada commit? Se eu empurrar após cada confirmação, verei quantos dados são enviados. Esta é uma maneira de estimar isso. Mas deve haver uma maneira melhor.

A solução aceita me fornece a seguinte saída:

$ ./git-commit-sizes 
1494 40eb8832156be81711f3816f04031cf3b8ef16b0 2
0 fbfb9f4c1f7ae403b9d8b4e194e384c6c41283ad 2
1961638 35e59833bad00edff2c5e8600eb4e62251606556 23
0 49cffee125318113d5dbe6f81e4ce12dcc07263d 2

Cada linha representa um commit, dando três informações:

bytes usados, nome sha1, arquivos alterados

    
por ArekBulski 04.05.2015 / 17:19

1 resposta

5

Aqui está um script perl para determinar o tamanho de cada commit do Git:

A fonte é aqui , adicionei um modificação:

#!/usr/bin/perl
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'  ;
#  }
}

Inicie o script no seu repositório git.

<path_to_script>/commit-size | awk '/\s80973c0/ {print  " bytes"}'  80973c0

Meu exemplo:

± commit-size | awk '/\se920f35/ {print  " bytes"}'  
546 bytes
    
por A.B. 05.05.2015 / 00:05