From 77e08d1334db93d3f7b2f301cbd998732012c20d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Cyryl=20P=C5=82otnicki?= Date: Fri, 18 Jan 2019 11:59:28 +0000 Subject: [PATCH] add git-find-large --- tools/git-find-large | 35 +++++++++++++++++++++++++++++++++++ 1 file changed, 35 insertions(+) create mode 100755 tools/git-find-large diff --git a/tools/git-find-large b/tools/git-find-large new file mode 100755 index 00000000..86517f2e --- /dev/null +++ b/tools/git-find-large @@ -0,0 +1,35 @@ +#!/bin/bash +#set -x + +# Shows you the largest objects in your repo's pack file. +# Written for osx. +# +# @see https://stubbisms.wordpress.com/2009/07/10/git-script-to-show-largest-pack-objects-and-trim-your-waist-line/ +# @author Antony Stubbs + +# set the internal field spereator to line break, so that we can iterate easily over the verify-pack output +IFS=$'\n'; + +# list all objects including their size, sort by size, take top 10 +objects=`git verify-pack -v .git/objects/pack/pack-*.idx | grep -v chain | sort -k3nr | head` + +echo "All sizes are in kB's. The pack column is the size of the object, compressed, inside the pack file." + +output="size,pack,SHA,location" +allObjects=`git rev-list --all --objects` +for y in $objects +do + # extract the size in bytes + size=$((`echo $y | cut -f 5 -d ' '`/1024)) + # extract the compressed size in bytes + compressedSize=$((`echo $y | cut -f 6 -d ' '`/1024)) + # extract the SHA + sha=`echo $y | cut -f 1 -d ' '` + # find the objects location in the repository tree + other=`echo "${allObjects}" | grep $sha` + #lineBreak=`echo -e "\n"` + output="${output}\n${size},${compressedSize},${other}" +done + +echo -e $output | column -t -s ', ' +