Bắt kích thước cam kết trong Git?


9

Có cách nào để tìm ra bao nhiêu không gian được sử dụng bởi mỗi cam kết không? Nếu tôi đẩy sau mỗi lần xác nhận, tôi sẽ thấy có bao nhiêu dữ liệu được gửi. Đây là một cách để ước tính nó. Nhưng phải có một cách tốt hơn.

Giải pháp được chấp nhận cho tôi đầu ra sau:

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

Mỗi dòng đại diện cho một cam kết, đưa ra ba thông tin:

byte được sử dụng, tên sha1, tập tin đã thay đổi


Câu trả lời:


10

Dưới đây là tập lệnh perl để xác định kích thước của từng cam kết Git:

Nguồn ở đây , tôi đã thêm một sửa đổi:

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

Bắt đầu tập lệnh trong kho git của bạn.

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

Ví dụ của tôi:

± commit-size | awk '/\se920f35/ {print $1 " bytes"}'  
546 bytes

@ArekBulski Bạn nói đúng.
AB

Câu hỏi hay, câu trả lời hay ... ;-)
Fabby

@AB, Làm thế nào bạn có thể chạy một tập lệnh perl mà không cần perllệnh?
Iulian Onofrei

1
@IulianOnofrei bạn cần cài đặt perl ít nhất. Nhưng dòng đầu tiên #!/usr/bin/perlnói với shell những trình thông dịch sẽ sử dụng. Vì vậy, nếu bạn đặt tập lệnh thành tệp thực thi ( chmod +x path/to/script), shell sẽ rất vui khi chạy nó.
kjprice
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.