2012-04-20 7 views
7

Pensé que sería genial si fuera posible tomar un repositorio de Git, ejecutar algún script, y generar el número de líneas en el código base, y la proporción de cada autor que contribuyó lo.Determine la distribución del código actual por autor

Básicamente, como soy un codificador competitivo, me gustaría una medida personal para ver si el número de líneas que escribí (en HEAD actual) es mayor que el de mi (s) compañero (s). Sería una estadística divertida decir "escribí% de la base de código actual".

¿Alguien ha pensado alguna vez en hacer esto? He buscado una forma, pero mi guión de shell no es el mejor, así que no podría hacerlo solo.

+5

Estoy seguro de que has escuchado esto antes: "Medir el progreso de la programación por líneas de código es como medir el progreso de la construcción de aviones por peso". – Etaoin

+0

@Etaoin: desearía poder +1000 eso. :-) – torek

Respuesta

1

Puede intentar analizar la salida de git-blame. Este comando proporciona la última persona que editó cada línea de un archivo.

Este ejemplo no es exactamente lo que quiere, pero creo que le da la idea:

git blame -e the/file | awk -F '<|>' '{print $2}' | sort | uniq -c 

Esto imprimirá las direcciones de correo electrónico de los autores junto con el número de líneas que se modifican, por último, para una archivo, por ejemplo:

 47 [email protected] 
    34712 [email protected] 

para que funcione en todo el repositorio, puede hacer algo como esto:

git ls-files | while read f; do git blame -e $f; done | awk -F '<|>' '{print $2}' | sort | uniq -c 

La idea aquí es generar primero la lista de archivos con git ls-files, y luego ejecutar el fragmento de arriba en cada uno de los archivos (usando el fragmento mencionado here). Si está ejecutando esto en una gran base de código, es posible que desee almacenar resultados intermedios en archivos temporales en lugar de usar pipes.

1

Probablemente necesite gitdm, puede hacer exactamente lo que necesita. Lo usamos para el proyecto Mahara para producir contribution statistics.

Eso sí, lo que sugiere README:

Una línea de comandos típica utilizada para generar el "que escriben 2.6.x" LWN artículos se parece a:

git log -p -M v2.6.19..v2.6.20 | gitdm -u -s -a -o results -h results.html 

También puede personalizar para tus propios fines

Cuestiones relacionadas