git diff
vous montrera le nombre de doublé retiré ou ajouté.
Utilisez awk, sed ou toute autre commande unix pour extraire les données de l'entrée
--shortstat
est ce que vous voulez:
git diff --shortstat commit1 commit2
git cat-file -s
va afficher la taille en octets d'un objet dans git.
git diff-tree
peut vous indiquer les différences entre un arbre et un autre. Rassembler ceci en un script appelé git-file-size-diff
Nous pouvons essayer quelque chose comme ce qui suit:
#!/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
}
En utilisation cela ressemble à ce qui suit:
$ git file-size-diff HEAD~850..HEAD~845
-234 a.txt
112 folder/file.txt
-4 README.md
28 b.txt
total -98
En utilisant git-rev-parse
il doit accepter toutes les manières habituelles de spécifier commettre des plages.
Remarque:
que bash exécute le tout lu dans un sous-shell, d'où les accolades supplémentaires pour éviter de perdre le total lors de la sortie de sous-shell.
'--shortstat' affiche seulement les lignes enlevées, je veux les octets –
C'est la différence de taille nette, pas la taille des lignes enlevées –