รับขนาดกระทำใน Git?


9

มีวิธีใดที่จะทราบว่าแต่ละพื้นที่กระทำการใช้พื้นที่เท่าไร? หากฉันกดแต่ละครั้งหลังจากส่งฉันจะเห็นจำนวนข้อมูลที่ส่ง นี่เป็นวิธีหนึ่งในการประมาณค่า แต่ต้องมีวิธีที่ดีกว่า

วิธีการแก้ปัญหาที่ได้รับการยอมรับให้ฉันผลลัพธ์ต่อไปนี้:

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

แต่ละบรรทัดแสดงถึงการคอมมิชชันหนึ่งโดยให้ข้อมูลสามรายการ:

ไบต์ที่ใช้, ชื่อ sha1, ไฟล์ถูกเปลี่ยน


คำตอบ:


10

นี่คือสคริปต์ Perl เพื่อกำหนดขนาดของ Git แต่ละการกระทำ:

แหล่งที่มาอยู่ที่นี่ฉันได้เพิ่มการแก้ไข:

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

เริ่มต้นสคริปต์ในที่เก็บ git ของคุณ

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

ตัวอย่างของฉัน:

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

@ArekBulski คุณพูดถูก
AB

เป็นคำถามที่ดีคำตอบที่ดี ... ;-)
Fabby

@AB, คุณจะรันสคริปต์ perl โดยไม่มีperlคำสั่งได้อย่างไร
Iulian Onofrei

1
@IulianOnofrei คุณต้องติดตั้ง Perl อย่างน้อยที่สุด แต่บรรทัดแรก#!/usr/bin/perlบอกให้เชลล์รู้ว่าจะใช้ล่ามอะไร ดังนั้นหากคุณตั้งค่าสคริปต์เป็น executable ( chmod +x path/to/script) เชลล์ยินดีที่จะใช้งาน
kjprice
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.