获取没有tmp文件的git commit的文件大小

时间:2016-02-15 06:26:22

标签: linux git bash

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

根据@Cyrus的建议,git diff --cached | wc -c是一个很好的近似值,但它依赖于编码。

我还尝试了进程替换ls -l <(git diff --cached) | awk '{print $5}',但返回0。

编辑:基于@torek's answer,我想出了这两个解决方案:

git ls-files --stage | cut -d' ' -f2 | xargs -L 1 git cat-file -s | awk '{s+=$1} END {print s}'

git diff --cached | awk -F. '/index/ {print $3}' | xargs -L 1 git cat-file -s | awk '{s+=$1} END {print s}'

后者也处理新文件。

2 个答案:

答案 0 :(得分:2)

要获取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-file --batch-check(由于git 1.8.4,现在需要格式参数来选择要打印的信息;请参阅the documentation)。

答案 1 :(得分:1)

我认为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); }'