Dostajesz rozmiary zatwierdzeń w Git?

9

Czy istnieje sposób, aby dowiedzieć się, ile miejsca zajęło każde zatwierdzenie? Jeśli będę naciskać po każdym zatwierdzeniu, zobaczę, ile danych jest wysyłanych. To jeden ze sposobów jej oszacowania. Ale musi być lepszy sposób.

Zaakceptowane rozwiązanie daje mi następujące wyniki:

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

Każda linia reprezentuje jeden zatwierdzenie, podając trzy informacje:

używane bajty, nazwa sha1, pliki zmienione

ArekBulski
źródło

Odpowiedzi:

10

Oto skrypt perla, który określa rozmiar każdego zatwierdzenia Git:

Źródło jest tutaj , dodałem jedną modyfikację:

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

Uruchom skrypt w repozytorium git.

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

Mój przykład:

± commit-size | awk '/\se920f35/ {print $1 " bytes"}'  
546 bytes
AB
źródło
@ArekBulski Masz rację.
AB
Dobre pytanie, dobra odpowiedź ... ;-)
Fabby
@AB, Jak uruchomić skrypt perla bez perlpolecenia?
Iulian Onofrei
1
@IulianOnofrei potrzebujesz perla zainstalowanego co najmniej. Ale pierwszy wiersz #!/usr/bin/perlmówi powłoce, jakiego interpretera użyć. Jeśli więc ustawisz skrypt na wykonywalny ( chmod +x path/to/script), powłoka z przyjemnością go uruchomi.
kjprice