我有一大堆可怕的代码,我在版本控制中进行设置。
我想要一个可以在Linux上运行的命令,以便在运行git add -A && git commit -am 'initial commit'
需要总大小,按文件夹分解也很方便。
然后我将使用它来构建我的忽略,这样我可以在我推升之前将回购设备变为现实大小
答案 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工具:du
,find
,& 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