如何在git中获取工作副本大小?

时间:2014-03-03 22:25:50

标签: git

我想在git中计算当前检出的分支的总工作副本大小(仅限版本化文件;未忽略的文件或尚未成为HEAD后代的文件)。目前我试过这个:

$ git ls-files | du -k | cut -f1 | awk '{total += $1} END {print total}'

然而,这需要花费大量时间并输出一个似乎没有意义的数字:

29800260

我不确定这个数字是多少。如果有更快或更准确的命令,请告诉我。

2 个答案:

答案 0 :(得分:2)

你是在正确的道路上,但是使用反引号代替管道。

du -k `git ls-files` | awk '{total += $1} END {print total}'

如果您不得不担心空格,git ls-filesxargs都可以使用空值进行通话:

git ls-files -z | xargs -0 du -k | awk '{total += $1} END {print total}'

你花了这么长时间,因为git ls-files |本质上是一个无操作,du -k |是当前目录中每个文件的管道输出。正是你想要避免的!

答案 1 :(得分:0)

请注意du显示文件占用的磁盘空间量。这可能会因文件系统类型和设置而异。例如,一个小的1字节文件可能占用4 KB的块,或者其内容可能与元数据一起存储。

如果您想要存储库中所有文件的确切字节大小的总和,您可以使用:

git ls-tree -r -l HEAD | cut -d' ' -f 4- | awk '{s+=$1} END {printf "%.0f\n", s}'

这使用存储在Git中的blob大小,也可以在裸存储库上运行。结果通常小于du的结果。