Mendapatkan ukuran komit di Git?

9

Apakah ada cara untuk mengetahui berapa banyak ruang yang digunakan oleh setiap komit? Jika saya mendorong setelah setiap komit, saya akan melihat berapa banyak data yang dikirim. Ini adalah salah satu cara memperkirakannya. Tetapi harus ada cara yang lebih baik.

Solusi yang diterima memberi saya hasil sebagai berikut:

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

Setiap baris mewakili satu komit, memberikan tiga informasi:

byte yang digunakan, nama sha1, file berubah

ArekBulski
sumber

Jawaban:

10

Berikut ini skrip perl untuk menentukan ukuran setiap komit Git:

Sumbernya ada di sini , saya telah menambahkan satu modifikasi:

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

Mulai skrip di repositori git Anda.

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

Contoh saya:

± commit-size | awk '/\se920f35/ {print $1 " bytes"}'  
546 bytes
AB
sumber
@ ArekBulski Anda benar.
AB
Pertanyaan bagus, jawaban bagus ... ;-)
Fabby
@ AB, Bagaimana Anda bisa menjalankan skrip perl tanpa perlperintah?
Iulian Onofrei
1
@IulianOnofrei Anda perlu perl diinstal setidaknya. Tetapi baris pertama #!/usr/bin/perlmemberi tahu shell apa yang digunakan juru bahasa. Jadi jika Anda mengatur skrip ke executable ( chmod +x path/to/script), shell dengan senang hati menjalankannya.
kjprice