$ git log --all --pretty='%h' --since='{2014-06-06}' | xargs -n1 sh size.sh
total: 240 0.0MB for 6df23f5
total: 88709989 84.6MB for f66712d
total: 26473 0.0MB for c397131
total: 462 0.0MB for 7c78e1c
And here is the size.sh file:
#!/bin/bash
if [[ -z "$1" ]] || [[ "$1" == "-h" ]] || [[ "$1" == "--help" ]] ; then
echo "Get change of size introduced by individual commits"
echo "Usage : $(basename "$0") <commit> ..."
echo "Example: git log --all --pretty='%h' --since='{2014-06-06}' | xargs bash size.sh"
exit 1
fi
while [[ "$1" ]]; do
commit="$1"
shift
total=0
git diff-tree -r $commit^1 $commit | {
while read -r sperms dperms oldobj obj flag filename; do
case $flag in
A) bytes=`git cat-file -s $obj`
;;
D) bytes=-`git cat-file -s $oldobj`
;;
M) bytes=$(( `git cat-file -s $obj` - `git cat-file -s $oldobj` ))
;;
*)
echo "ERROR: unknown flag \"$flag\" in in commit \"$commit\": $sperms $dperms $oldobj $obj $flag $filename"
continue
;;
esac
total=$(( total + bytes ))
done
total_mb=`echo $total | awk '{printf "%.1f",$1/1024/1024}'`
echo "total: $total ${total_mb}MB for $commit"
}
done
credits to for the idea:
http://stackoverflow.com/a/10847242/520567