gitfind胖提交

是否有可能得到有关每个提交更改浪费了多less空间的信息 – 所以我可以find增加大文件或大量文件的提交。 这是所有尝试减lessgit repo大小(重新绑定和可能的过滤提交)

你可以这样做:

 git ls-tree -r -t -l --full-name HEAD | sort -n -k 4 

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

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

忘了回复,我的回答是:

 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 

这里提供的所有解决scheme都集中在文件大小上,但是最初提出的问题是关于提交大小的问题 ,在我看来,对于我而言,find更重要的是(因为我想要摆脱许多小的二进制文件介绍一个单一的提交,其中总结了很多大小,但小尺寸,如果单独测量文件)。

这里提供了一个关于提交大小的解决scheme,这是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` ; # } } 

而我所说的是这样的:

 ./git-commit-sizes.pl | sort -n -k 1 

git fat find N其中N以字节为单位将返回整个历史中大于N字节的所有文件。

你可以在这里find更多关于git-fat的信息: https : //github.com/cyaninc/git-fat

就个人而言,我发现这个答案是最有用的,当试图find一个git回购的历史中的大文件: 查找git回购超过x兆​​字节,不存在于HEAD

git cat-file -s <object>其中<object>可以引用一个提交,blob,树或标记。

 #!/bin/bash COMMITSHA=$1 CURRENTSIZE=$(git ls-tree -lrt $COMMITSHA | grep blob | sed -E "s/.{53} *([0-9]*).*/\1/g" | paste -sd+ - | bc) PREVSIZE=$(git ls-tree -lrt $COMMITSHA^ | grep blob | sed -E "s/.{53} *([0-9]*).*/\1/g" | paste -sd+ - | bc) echo "$CURRENTSIZE - $PREVSIZE" | bc