git diff
покажет вам количество снятых или добавленных футеровок.
Использование AWK, СЭД или любая другая команда Unix для извлечения данных из входного
--shortstat
является то, что вы хотите:
git diff --shortstat commit1 commit2
git cat-file -s
будет выводить размер в байтах объекта в мерзавце.
git diff-tree
может рассказать вам о различиях между одним деревом и другим.
Вводя это вместе в скрипт под названием git-file-size-diff
.
Мы можем попробовать что-то вроде следующего:
#!/bin/sh
args=$(git rev-parse --sq "[email protected]")
# the diff-tree will output line like:
# :040000 040000 4...acd0 fd...94 M main.webapp
# parse the parameters form the diff-tree
eval "git diff-tree -r $args" | {
total=0
# read all the above params as described in thi sline:
# :040000 040000 4...acd0 fd...94 M main.webapp
while read A B C D M P
do
case $M in
# modified file
M) bytes=$(($(git cat-file -s $D) - $(git cat-file -s $C))) ;;
# Added file
A) bytes=$(git cat-file -s $D) ;;
# deleted file
D) bytes=-$(git cat-file -s $C) ;;
*)
# Error - no file status found
echo >&2 warning: unhandled mode $M in \"$A $B $C $D $M $P\"
continue
;;
# close the case statment
esac
# sum the total bytes so far
total=$(($total + $bytes))
# print out the (bytes) & the name of the file ($P)
printf '%d\t%s\n' $bytes "$P"
done
# print out the grand total
echo total $total
}
При использовании этого выглядит следующим образом:
$ git file-size-diff HEAD~850..HEAD~845
-234 a.txt
112 folder/file.txt
-4 README.md
28 b.txt
total -98
С помощью git-rev-parse
он должен принять все обычные способы задания диапазонов фиксации.
Примечание:
что Баш запускает время чтения в субоболочке, следовательно, дополнительные фигурные скобки, чтобы избежать потери всего, когда подоболочка выходит.
'--shortstat' показывает только удаленные строки, мне нужны байты –
То есть разница в размере чистого размера, а не размер удаленных строк –