Introduction
In collaborative software development, understanding each team member’s contribution is essential. This tutorial introduces a Bash script that calculates the percentage of contribution for each author in a Git repository. Let’s see how to use this tool to gather valuable insights into the work done by each person in a project.
Prerequisites
Before you begin, make sure you have the following requirements on your system:
- Installed Git: You can download it from git-scm.com.
- Access to the Git repository you want to analyze.
Step 1: Create the Script
Create a new file named contribution.sh
with the following content
#!/bin/bash
REPO_PATH=$(pwd)
DESDE_FECHA="2022-01-01"
HASTA_FECHA=$(date +"%Y-%m-%d")
# Obtener la lista de autores y la cantidad de líneas agregadas y eliminadas para cada uno
AUTHORS=$(git log --format='%aN' --since="$DESDE_FECHA" --until="$HASTA_FECHA" | sort -u)
echo "Estadísticas detalladas de contribución desde $DESDE_FECHA hasta $HASTA_FECHA en el repositorio $REPO_PATH:"
# Array para almacenar resumen
SUMMARY=()
# Calcular y mostrar el porcentaje para cada autor basado en líneas agregadas y eliminadas
for AUTHOR in $AUTHORS; do
AUTHOR_LINES=$(git log --author="$AUTHOR" --since="$DESDE_FECHA" --until="$HASTA_FECHA" --pretty=tformat: --numstat | awk '{if ($1 != "" && $1 != "-") sum += $1; if ($2 != "" && $2 != "-") sum += $2} END {if (sum != "") print sum; else print 0}')
TOTAL_LINES=$(git log --since="$DESDE_FECHA" --until="$HASTA_FECHA" --pretty=tformat: --numstat | awk '{if ($1 != "" && $1 != "-") sum += $1; if ($2 != "" && $2 != "-") sum += $2} END {if (sum != "") print sum; else print 0}')
# Salida detallada
echo "Detalles para $AUTHOR:"
echo " Líneas de $AUTHOR: $AUTHOR_LINES"
echo " Total de líneas: $TOTAL_LINES"
# Verificar que el total de líneas no sea cero antes de realizar el cálculo
if [[ "$TOTAL_LINES" -gt 0 ]]; then
# Utilizar printf para formatear la salida con tres decimales
PERCENTAGE=$(printf "%.3f" "$(echo "scale=4; ($AUTHOR_LINES / $TOTAL_LINES) * 100" | bc)")
echo " Porcentaje de contribución: $PERCENTAGE%"
# Agregar al resumen
SUMMARY+=("$AUTHOR: $PERCENTAGE%")
else
echo " No hay contribuciones en el rango de fechas especificado."
# Agregar al resumen con un porcentaje de 0%
SUMMARY+=("$AUTHOR: 0%")
fi
echo "-------------------------"
done
# Resumen general
echo "Resumen general:"
for LINE in "${SUMMARY[@]}"; do
echo "$LINE"
done
Configure permissions
chmod +x contribucion.sh
Exec the script:
./contribucion.sh