He respondido a esta pregunta , sugiriendo usar git hooks, pero, francamente, no estoy completamente satisfecho con la segunda parte, ya que crear un archivo temporal solo para obtener el tamaño de la confirmación parece redundante y feo. ¿Hay alguna manera de obtener el tamaño directamente? Suponga la implementación estándar de git.
Según lo sugerido por @Cyrus, git diff --cached | wc -c es una buena aproximación, pero depende de la codificación.
También probé la sustitución de procesos ls -l <(git diff --cached) | awk '{print $5}' pero eso devuelve 0.
Editar: según la respuesta de @torek, se me ocurrieron estas dos soluciones:
git ls-files --stage | cut -d' ' -f2 | xargs -L 1 git cat-file -s | awk '{s+=$1} END {print s}'
git diff --cached | awk -F. '/index/ {print $3}' | xargs -L 1 git cat-file -s | awk '{s+=$1} END {print s}'
Este último también maneja nuevos archivos.
Para obtener el tamaño (en bytes) de un objeto git, use git cat-file -s revspec . Por ejemplo:
$ git cat-file -s HEAD:Makefile 950Tenga en cuenta que esto le mostrará el tamaño del objeto de un árbol:
$ git cat-file -t HEAD: tree $ git cat-file -s HEAD: 546 Para una gran colección de ID, es posible que desee utilizar git cat-file --batch-check (que, desde git 1.8.4, ahora toma un argumento de formato para seleccionar qué información imprimir; consulte la documentación ).
Creo que git diff --cached --numstat es básicamente la principal fuente de información. Para mí, no está completamente claro qué restricciones le gustaría poner en una confirmación, pero para resumir la cantidad de inserciones y eliminaciones, podría usar algo como esto:
git diff --numstat --cached | awk ' BEGIN { insertions=0; deletions=0; } { insertions+=$1; deletions+=$2; } END { printf("inserttions=%d, deletions=%d\n", insertions, deletions); }'