如何获得git中的工作副本大小?
我想用git计算当前签出分支的总工作副本大小(仅限版本文件;不忽略文件或尚未成为HEAD后代的文件)。目前我尝试了以下方法:如何获得git中的工作副本大小?,git,Git,我想用git计算当前签出分支的总工作副本大小(仅限版本文件;不忽略文件或尚未成为HEAD后代的文件)。目前我尝试了以下方法: $ git ls-files | du -k | cut -f1 | awk '{total += $1} END {print total}' 然而,这需要花费大量的时间并输出一个似乎没有意义的数字: 29800260 我不知道这个号码是多少。如果有更快或更准确的命令执行此操作,请告诉我。您走的是正确的道路,但请使用反勾号而不是管道 du -k `git ls-fi
$ git ls-files | du -k | cut -f1 | awk '{total += $1} END {print total}'
然而,这需要花费大量的时间并输出一个似乎没有意义的数字:
29800260
我不知道这个号码是多少。如果有更快或更准确的命令执行此操作,请告诉我。您走的是正确的道路,但请使用反勾号而不是管道
du -k `git ls-files` | awk '{total += $1} END {print total}'
如果您必须担心空白,那么git ls文件
和xargs
都可以使用空值:
git ls-files -z | xargs -0 du -k | awk '{total += $1} END {print total}'
这花了你这么长时间,因为
gitls文件|
基本上是不可操作的,而du-k |
是从当前目录下为每个文件输出的管道。这正是你想要避免的 注意,du
显示文件占用的磁盘空间量。这可能因文件系统类型和设置而异。例如,一个小的1字节文件可能占用4KB的块,或者其内容可能与元数据内联存储
如果需要存储库中所有文件的确切字节大小之和,可以使用以下方法:
git ls-tree -r -l HEAD | cut -d' ' -f 4- | awk '{s+=$1} END {printf "%.0f\n", s}'
这将使用存储在Git中的blob大小,也可以在裸存储库中使用。结果通常小于来自
du
du
的结果,因为du不读取标准输入,因此它基本上会忽略git
命令并遍历整个目录树。如果路径中有空格,则会中断。如何使其与空间一起工作?示例:Subdir/With Spaces/file.txt