我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}'
后者也处理新文件。
答案 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); }'