stats reports que hace gitstats example ejemplo git statistics find commit

reports - git encontrar grasa cometer



git stats (7)

¿Es posible obtener información sobre cuánto espacio se desperdicia con los cambios en cada confirmación? Así puedo encontrar confirmaciones que agreguen archivos grandes o muchos archivos. Todo esto es para tratar de reducir el tamaño del repositorio de git (rebasar y tal vez filtrar las confirmaciones)


Olvidé responder, mi respuesta es:

git rev-list --all --pretty=format:''%H%n%an%n%s'' # get all commits git diff-tree -r -c -M -C --no-commit-id #{sha} # get new blobs for each commit git cat-file --batch-check << blob ids # get size of each blob



Podrías hacer esto:

git ls-tree -r -t -l --full-name HEAD | sort -n -k 4

Esto mostrará los archivos más grandes en la parte inferior (la cuarta columna es el tamaño del archivo (blob).

Si necesita buscar en diferentes sucursales, querrá cambiar HEAD a los nombres de esas sucursales. O bien, ponga esto en un bucle sobre las ramas, etiquetas o revoluciones que le interesen.


Todas las soluciones proporcionadas aquí se centran en el tamaño de los archivos, pero la pregunta original fue sobre el tamaño de los comités , que en mi opinión, y en mi caso, fue más importante encontrar (porque lo que quería era deshacerme de muchos binarios pequeños). introducido en un solo compromiso, que se resumió representó una gran cantidad de tamaño, pero tamaño pequeño si se mide individualmente por archivo).

here proporciona una solución que se centra en los tamaños de compromiso, que es este script de perl:

#!/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` ; # } }

Y a la que llamo así:

./git-commit-sizes.pl | sort -n -k 1


git cat-file -s <object> donde <object> puede referirse a un commit, blob, tree o tag.


git fat find N donde N está en bytes devolverá todos los archivos de todo el historial, que son más grandes que N bytes.

Puede encontrar más información sobre git-fat aquí: https://github.com/cyaninc/git-fat


#!/bin/bash COMMITSHA=$1 CURRENTSIZE=$(git ls-tree -lrt $COMMITSHA | grep blob | sed -E "s/.{53} *([0-9]*).*//1/g" | paste -sd+ - | bc) PREVSIZE=$(git ls-tree -lrt $COMMITSHA^ | grep blob | sed -E "s/.{53} *([0-9]*).*//1/g" | paste -sd+ - | bc) echo "$CURRENTSIZE - $PREVSIZE" | bc