Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/21.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何获得git中的工作副本大小?_Git - Fatal编程技术网

如何获得git中的工作副本大小?

如何获得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计算当前签出分支的总工作副本大小(仅限版本文件;不忽略文件或尚未成为HEAD后代的文件)。目前我尝试了以下方法:

$ 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