¿Obtener tamaños de confirmación en Git?

9

¿Hay alguna manera de averiguar cuánto espacio fue utilizado por cada commit? Si presiono después de cada confirmación, veré cuántos datos se envían. Esta es una forma de estimarlo. Pero debe haber una mejor manera.

La solución aceptada me da el siguiente resultado:

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

Cada línea representa una confirmación, dando tres información:

bytes utilizados, nombre sha1, archivos modificados

ArekBulski
fuente

Respuestas:

10

Aquí hay un script perl para determinar el tamaño de cada confirmación de Git:

La fuente está aquí , he agregado una modificación:

#!/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 el script en su repositorio git.

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

Mi ejemplo:

± commit-size | awk '/\se920f35/ {print $1 " bytes"}'  
546 bytes
AB
fuente
@ArekBulski Tienes razón.
AB
Buena pregunta, buena respuesta ... ;-)
Fabby
@AB, ¿Cómo puedes ejecutar un script perl sin el perlcomando?
Iulian Onofrei
1
@IulianOnofrei necesita al menos perl instalado. Pero la primera línea #!/usr/bin/perlle dice al intérprete qué intérprete usar. Entonces, si configura el script como ejecutable ( chmod +x path/to/script), un shell se complace en ejecutarlo.
kjprice