我想在git中计算当前检出的分支的总工作副本大小(仅限版本化文件;未忽略的文件或尚未成为HEAD后代的文件)。目前我试过这个:
$ git ls-files | du -k | cut -f1 | awk '{total += $1} END {print total}'
然而,这需要花费大量时间并输出一个似乎没有意义的数字:
29800260
我不确定这个数字是多少。如果有更快或更准确的命令,请告诉我。
答案 0 :(得分:2)
你是在正确的道路上,但是使用反引号代替管道。
du -k `git ls-files` | awk '{total += $1} END {print total}'
如果您不得不担心空格,git ls-files
和xargs
都可以使用空值进行通话:
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
的结果。