Linux 获取没有tmp文件的git提交的文件大小

Linux 获取没有tmp文件的git提交的文件大小,linux,git,bash,Linux,Git,Bash,我建议使用git钩子,但坦率地说,我对第二部分并不完全满意,因为创建一个临时文件只是为了获得提交的大小看起来是多余和丑陋的。有没有办法直接得到尺码?假设使用标准git实现 正如@Cyrus所建议的,gitdiff--cached | wc-c是一个很好的近似值,但它依赖于编码 我还尝试了进程替换ls-l我认为git diff--cached--numstat基本上是信息的主要来源。对我来说,还不完全清楚您希望对提交设置什么限制,但要总结插入和删除的数量,您可以使用以下内容: git diff -

我建议使用git钩子,但坦率地说,我对第二部分并不完全满意,因为创建一个临时文件只是为了获得提交的大小看起来是多余和丑陋的。有没有办法直接得到尺码?假设使用标准git实现

正如@Cyrus所建议的,
gitdiff--cached | wc-c
是一个很好的近似值,但它依赖于编码


我还尝试了进程替换
ls-l我认为
git diff--cached--numstat
基本上是信息的主要来源。对我来说,还不完全清楚您希望对提交设置什么限制,但要总结插入和删除的数量,您可以使用以下内容:

git diff --numstat --cached | awk '
   BEGIN { insertions=0; deletions=0; }
   { insertions+=$1; deletions+=$2; }
   END { printf("inserttions=%d, deletions=%d\n", insertions, deletions); }'
要获取git对象的大小(以字节为单位),请使用
git cat file-s revspec
。例如:

$ git cat-file -s HEAD:Makefile
950
请注意,这将显示树的对象大小:

$ git cat-file -t HEAD:
tree
$ git cat-file -s HEAD:
546

对于大量的ID集合,您可能需要使用git cat文件--batch check(批处理检查)
(从git 1.8.4开始,它现在使用一个format参数来选择要打印的信息;请参见)。

git diff--cached | wc-c
?我想这是一个很好的近似值,但它依赖于编码。我还尝试了process sub
ls-l谢谢,索引的refspec是什么?我提出了
git diff--cached | awk-F./index/{print$3}'| xargs-l 1 git cat file-s | awk'{s+=$1}END{print s}'
但我想有一个更优雅的解决方案,索引没有refspec(其中n是0,1,2,3中的一个)如果知道路径,则可以使用。更一般地说,要读取它,请使用
git ls files
(在本例中,
git ls files--stage
可能是正确的方法)“<代码> n>代码>代表什么?例如:代码> Git Rev解析:0:Read Me/Cult>获得文件<代码> > ReMeMe/C>的索引槽0的SHA-1。如果<代码> Fo.Py < /C>处于冲突合并的中间,<代码>:1:Fo.Py < /C> >代码>:2:Fo.Py < /C> >和<代码>:3:Fo.Py < /Cord>获取文件的三个版本的SHA1S。(虽然如果冲突是删除与修改或创建与创建,则可能少于3个版本)。谢谢,但我指的是以字节为单位的文件大小,如
ls