Git에서 커밋 크기를 얻습니까?


9

각 커밋이 얼마나 많은 공간을 사용했는지 알아내는 방법이 있습니까? 각 커밋 후에 푸시하면 얼마나 많은 데이터가 전송되는지 볼 수 있습니다. 이를 추정하는 한 가지 방법입니다. 그러나 더 좋은 방법이 있어야합니다.

허용되는 솔루션은 다음과 같은 출력을 제공합니다.

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

각 줄은 하나의 커밋을 나타내며 세 가지 정보를 제공합니다.

사용 된 바이트, sha1 이름, 파일 변경


답변:


10

각 Git 커밋의 크기를 결정하는 perl 스크립트는 다음과 같습니다.

소스는 여기 에 하나의 수정 사항을 추가했습니다.

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

자식 저장소에서 스크립트를 시작하십시오.

<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명령 없이 펄 스크립트를 실행할 수 있습니까?
Iulian Onofrei

1
@IulianOnofrei 당신은 최소한 perl을 설치해야합니다. 그러나 첫 번째 줄 #!/usr/bin/perl은 쉘에 어떤 인터프리터를 사용해야하는지 알려줍니다. 따라서 스크립트를 실행 파일 ( chmod +x path/to/script)로 설정하면 셸을 실행해도됩니다.
kjprice
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.