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

dy2hfwbg  于 2023-08-01  发布在  Git
关注(0)|答案(6)|浏览(145)

我有一大堆可怕的代码,我正在版本控制中设置它。
我想要一个可以在Linux上运行的命令,以给予运行git add -A && git commit -am 'initial commit'时提交和推送的文件的总大小
总的大小是需要的,也是一个细分的文件夹将是方便的。
然后,我将使用它来建立我的忽略,这样我就可以得到一个现实的大小回购之前,我把它

2nc8po8w

2nc8po8w1#

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

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的用法,但无法让它工作

z9smfwbn

z9smfwbn2#

我修改了edmondscommerce的答案,添加了一个简单的awk语句,它对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仓库根目录的路径名。所以,如果你在子目录中这样做,du语句将无法找到文件。
(whoppa;我在SoF的第一个答案,愿原力与它同在)

hpxqektj

hpxqektj3#

我使用了一个修改过的版本,因为我的文件中有空格,这使得它崩溃。我也不确定大小计算,并删除了一个无用的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的状态,但我找不到一个好的方法。

lf5gs5x2

lf5gs5x24#

版本2.11开始,git提供了一个方便的"count-objects"命令:

git count-objects -H

字符串
如果这还不够,我推荐git-sizer:https://github.com/github/git-sizer

git-sizer --verbose


详细用法在这里:https://github.com/github/git-sizer/#usage

2exbekwf

2exbekwf5#

既然你只是添加所有东西,我看不出有任何理由通过Git。使用Unix工具:dufind等。

wlwcrazw

wlwcrazw6#

我也想要一个更智能的git add,但更多的原因是增量。我想到了这个鱼函数:

function gitadd
    set size (git status --short | grep -v '^ D' | awk '{print substr($0,4)}' | xargs -n 1 du -b | awk '{print $1}' | sum)
    if test $size -lt 1048576 # 1MiB
        git add .
    else
        git status --short | grep -v '^ D' | awk '{print substr($0,4)}' | xargs -n 1 du -h
        git diff --stat --relative
        return 1
    end
end

function sum
    set accumulator 0
    while read -l line
        set accumulator (math $accumulator+$line)
    end
    echo $accumulator
end

字符串

相关问题