Festschreibungsgrößen in Git erhalten?

9

Gibt es eine Möglichkeit herauszufinden, wie viel Speicherplatz von jedem Commit belegt wurde? Wenn ich nach jedem Commit drücke, sehe ich, wie viele Daten gesendet werden. Dies ist eine Möglichkeit, dies abzuschätzen. Aber es muss einen besseren Weg geben.

Akzeptierte Lösung gibt mir folgende Ausgabe:

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

Jede Zeile stellt ein Commit dar und gibt drei Informationen:

Verwendete Bytes, Name sha1, geänderte Dateien

ArekBulski
quelle
3
Schauen Sie sich das an stackoverflow.com/questions/1286183/git-find-fat-commit
solsTiCe

Antworten:

10

Hier ist ein Perl-Skript, um die Größe jedes Git-Commits zu bestimmen:

Die Quelle ist hier , ich habe eine Modifikation hinzugefügt:

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

Starten Sie das Skript in Ihrem Git-Repository.

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

Mein Beispiel:

± commit-size | awk '/\se920f35/ {print $1 " bytes"}'  
546 bytes
AB
quelle
@ArekBulski Du hast recht.
AB
Gute Frage, gute Antwort ... ;-)
Fabby
@AB, Wie kann man ein Perl-Skript ohne den perlBefehl ausführen ?
Iulian Onofrei
1
@IulianOnofrei Sie müssen mindestens Perl installiert haben. Die erste Zeile #!/usr/bin/perlteilt der Shell jedoch mit, welcher Interpreter verwendet werden soll. Wenn Sie also das Skript auf ausführbare Datei ( chmod +x path/to/script) setzen, führt eine Shell dies gerne aus.
Preis