我想在我的存储库中找到10个最大的文件.我想出的脚本如下:
REP_HOME_DIR=<top level git directory>
max_huge_files=10
cd ${REP_HOME_DIR}
git verify-pack -v ${REP_HOME_DIR}/.git/objects/pack/pack-*.idx | \
grep blob | \
sort -r -k 3 -n | \
head -${max_huge_files} | \
awk '{ system("printf \"%-80s \" `git rev-list --objects --all | grep " $1 " | cut -d\" \" -f2`"); printf "Size:%5d MB Size in pack file:%5d MB\n", $3/1048576, $4/1048576; }'
cd -
Run Code Online (Sandbox Code Playgroud)
是否有更好/更优雅的方式来做同样的事情?
"文件"是指已经检入存储库的文件.
ypi*_*pid 47
我发现了另一种方法:
Run Code Online (Sandbox Code Playgroud)git ls-tree -r -t -l --full-name HEAD | sort -n -k 4 | tail -n 10
rap*_*sse 17
这个bash"one-liner"显示了存储库中10个最大的blob,从最小到最大排序.与其他答案相比,这包括存储库跟踪的所有文件,甚至包括任何分支提示中不存在的文件.
它非常快速,易于复制和粘贴,只需要标准的GNU实用程序.
git rev-list --objects --all \
| git cat-file --batch-check='%(objecttype) %(objectname) %(objectsize) %(rest)' \
| awk '/^blob/ {print substr($0,6)}' \
| sort --numeric-sort --key=2 \
| tail \
| cut --complement --characters=13-40 \
| numfmt --field=2 --to=iec-i --suffix=B --padding=7 --round=nearest
Run Code Online (Sandbox Code Playgroud)
前四行实现了核心功能,第五行限制了结果数量,而后两行提供了良好的人类可读输出,如下所示:
...
0d99bb931299 530KiB path/to/some-image.jpg
2ba44098e28f 12MiB path/to/hires-image.png
bd1741ddce0d 63MiB path/to/some-video-1080p.mp4
Run Code Online (Sandbox Code Playgroud)
有关更多信息,包括进一步过滤用例和更适合脚本处理的输出格式,请参阅我对类似问题的原始答案.
小智 13
怎么样
git ls-files | xargs ls -l | sort -nrk5 | head -n 10
Run Code Online (Sandbox Code Playgroud)
对 raphinesse 答案的改进,按大小排序,最大的在前:
git rev-list --objects --all \
| git cat-file --batch-check='%(objecttype) %(objectname) %(objectsize) %(rest)' \
| awk '/^blob/ {print substr($0,6)}' \
| sort --numeric-sort --key=2 --reverse \
| head \
| cut --complement --characters=13-40 \
| numfmt --field=2 --to=iec-i --suffix=B --padding=7 --round=nearest
Run Code Online (Sandbox Code Playgroud)
无法评论。ypid 为 powershell 修改的答案
git ls-tree -r -l --abbrev --full-name HEAD | Sort-Object {[int]($_ -split "\s+")[3]} | Select-Object -last 10
Run Code Online (Sandbox Code Playgroud)
编辑 raphinesse 的解决方案(ish)
git rev-list --objects --all | git cat-file --batch-check='%(objecttype) %(objectname) %(objectsize) %(rest)' | Where-Object {$_ -like "blob*"} | Sort-Object {[int]($_ -split "\s+")[2]} | Select-Object -last 10
Run Code Online (Sandbox Code Playgroud)
您还可以使用du
- 例如:du -ah objects | sort -n -r | head -n 10
. du 获取对象的大小,sort
然后使用 挑选前 10 个head
。
归档时间: |
|
查看次数: |
13606 次 |
最近记录: |