首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >git查找fat提交

git查找fat提交
EN

Stack Overflow用户
提问于 2009-08-17 04:41:15
回答 7查看 21.6K关注 0票数 55

有没有可能得到每次提交中的更改浪费了多少空间的信息--这样我就可以找到添加了大文件或大量文件的提交。这一切都是为了减少git repo大小(重新设置基数,可能还会过滤提交)

EN

回答 7

Stack Overflow用户

回答已采纳

发布于 2009-10-12 22:59:06

忘记回复了,我的答案是:

代码语言:javascript
复制
git rev-list --all --pretty=format:'%H%n%an%n%s'    # get all commits
git diff-tree -r -c -M -C --no-commit-id #{sha}     # get new blobs for each commit
git cat-file --batch-check << blob ids              # get size of each blob
票数 16
EN

Stack Overflow用户

发布于 2009-08-17 19:51:29

你可以这样做:

代码语言:javascript
复制
git ls-tree -r -t -l --full-name HEAD | sort -n -k 4

这将在底部显示最大的文件(第四列是文件(blob)大小。

如果您需要查看不同的分支,则需要将HEAD更改为这些分支的名称。或者,将其放在您感兴趣的分支、标记或转速上。

票数 25
EN

Stack Overflow用户

发布于 2017-01-06 15:24:44

这里提供的所有解决方案都集中在文件大小上,但最初提出的问题是关于提交大小,在我看来,在我的例子中,更重要的是找到它(因为我想要的是摆脱在一次提交中引入的许多小二进制文件,这些小二进制文件加起来占了很大的大小,但如果按文件单独衡量,就会很小)。

一个专注于提交大小的解决方案是提供的here,它是这个perl脚本:

代码语言:javascript
复制
#!/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`  ;
#  }
}

我这样称呼它:

代码语言:javascript
复制
./git-commit-sizes.pl | sort -n -k 1
票数 7
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/1286183

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档