在git中查找未提交或未跟踪文件的总大小

时间:2014-02-17 15:21:48

标签: linux git bash

我有一大堆可怕的代码,我在版本控制中进行设置。

我想要一个可以在Linux上运行的命令,以便在运行git add -A && git commit -am 'initial commit'

时向我提供将提交和推送的文件的总大小

需要总大小,按文件夹分解也很方便。

然后我将使用它来构建我的忽略,这样我可以在我推升之前将回购设备变为现实大小

5 个答案:

答案 0 :(得分:9)

我想我已经回答了我自己的问题:

for f in `git status --porcelain | sed 's#^...##'`; do du -cs $f | head -n 1; done | sort -nr;  echo "TOTAL:"; du -cs .

然而,我对任何更好的想法或有用的技巧持开放态度。我目前的输出是13GB:)


上面的命令基本上就在那里,它从git status中逐行给出了总数但不给我总和。我目前正在获取最终所有文件的总数,这是不正确的。我尝试过使用bc但无法使用它

答案 1 :(得分:4)

我通过添加一个简单的awk语句来修改edmondscommerce的答案,该语句对for循环的输出求和并打印总和(除以1024 * 1024以转换为Mb)

for f in `git status --porcelain | sed 's#^...##'`; do du -cs $f | head -n 1; done | sort -nr  | awk ' {tot = tot+$1; print } END{ printf("%.2fMb\n",tot/(1024*1024)) }' 

请注意--porcelain打印相对于git repos根目录的路径名。因此,如果您在子目录中执行此操作,du语句将无法找到文件..

(whoppa;我在SoF的第一个答案,可能是它的力量)

答案 2 :(得分:1)

我使用了此版本的修改版本,因为我的文件中包含空格,导致崩溃。我也不确定大小计算,并删除了无用的head

git status --porcelain | sed 's/^...//;s/^"//;s/"$//' | while read path; do
    du -bs "$path" ;
done | sort -n | awk ' {tot = tot+$1; print } END { printf("%.2fMB\n",tot/(1024*1024)) }'

我更喜欢使用while,因为它比for安全一些:对于包含换行符的文件,它仍然可以处理令人讨厌的事情,因此我希望可以通过null-单独的文件仍然可以grep表示状态,但是我找不到解决这个问题的好方法。

答案 3 :(得分:0)

由于你只是添加了所有内容,我认为没有理由通过Git。只需使用普通的Unix工具:dufind,& c。

答案 4 :(得分:0)

从2.11版开始,git提供了方便的"count-objects" command

git count-objects -H

如果这还不够,我建议从github推荐git-sizer: https://github.com/github/git-sizer

git-sizer --verbose

此处的详细用法:https://github.com/github/git-sizer/#usage