Que Git commit estadísticas son de fácil extracción
-
18-09-2019 - |
Pregunta
Anteriormente he disfrutado de TortoiseSvn capacidad para generar sencillo cometer estadísticas para un determinado repositorio SVN.Me pregunto lo que está disponible en Git y estoy particularmente interesado en :
- Número de confirmaciones por usuario
- Número de líneas cambiado por el usuario
- la actividad a lo largo del tiempo (por ejemplo agregados cambio semanal)
Alguna idea?
Solución
En realidad, git ya tiene un comando para esto:
git shortlog
En su caso, parece que usted está interesado en esta forma:
git shortlog -sne
Vea la --help
para diversas opciones.
También puede estar interesado en el GitStats proyecto . Tienen algunos ejemplos, incluyendo las estadísticas rel="noreferrer"> . Desde la página principal GitStat:
A continuación se muestra una lista de algunas estadísticas generadas actualmente:
- estadísticas generales: archivos totales, líneas, se compromete, autores .
- Actividad: se compromete por hora del día, día de la semana, la hora de la semana, el mes del año, año y mes y año .
- Autores: lista de los autores (nombre, se compromete (%), cometen primera fecha, fecha de la última confirmación, la edad), autor de mes, autor del año .
- Archivos: número de archivos por fecha, extensiones
- Líneas: líneas de código por fecha
Otros consejos
En primer lugar, usted no tiene que tire nada (como en la red de arrastre), porque tienes todo el repositorio y toda la historia local. Estoy bastante seguro de que hay herramientas que le dará las estadísticas, pero a veces puedo ser creativo con las líneas de comando. Por ejemplo, este (justo fuera de mi cabeza) le dará el número de confirmaciones por usuario:
git log --pretty=format:%ae \
| gawk -- '{ ++c[$0]; } END { for(cc in c) printf "%5d %s\n",c[cc],cc; }'
Otras estadísticas que solicitó pueden necesitar más pensamiento puesto en ella. Es posible que desee ver las herramientas disponibles. Google para puntos git statistics
a la herramienta GitStats
, que no tengo experiencia con, e incluso menos idea de lo que se necesita para conseguir que se ejecutan en windows, pero se puede tratar.
La mejor herramienta hasta ahora identficados es gitinspector. Se entrega el informe conjunto por usuario, por semana, etc.
Se puede instalar como a continuación con NPM
npm install -g gitinspector
Detalles para obtener los enlaces están por debajo
https://www.npmjs.com/package/gitinspector
https://github.com/ejwa/gitinspector/wiki/Documentation
https://github.com/ejwa/gitinspector
comandos de ejemplo son
gitinspector -lmrTw
gitinspector --since=1-1-2017
etc.
Gracias a hackers para responder a esta pregunta. Sin embargo, me encontré con estas versiones modificadas a ser mejor para mi uso particular:
git log --pretty=format:%an \
| awk '{ ++c[$0]; } END { for(cc in c) printf "%5d %s\n",c[cc],cc; }'\
| sort -r
(usando awk como no tengo gawk en mi mac, y la clasificación con más comitter activa en la parte superior.) Genera una lista de este modo:
1205 therikss
1026 lsteinth
771 kmoes
720 minielse
507 pagerbak
269 anjohans
205 mfoldbje
188 nstrandb
133 pmoller
58 jronn
10 madjense
3 nlindhol
2 shartvig
2 THERIKSS
Aquí hay maneras de obtener estadísticas de una rama específica o dos hashs.
clave aquí es la capacidad de hacer HASH..HASH
A continuación estoy usando la primera hash a partir de una rama a la cabeza, que es el fin de esa rama.
Mostrar el total de confirmaciones en una rama
- FIRST_HASH..HEAD git log = --pretty oneline | wc -l
- Salida 53
Mostrar el total de confirmaciones por autor
- git shortlog FIRST_HASH..HEAD -sne
- salida
- 24 Autor Nombre
- 9 Autor Nombre
Tenga en cuenta que, si tu repositorio está en GitHub , que ahora (mayo de 2013) tiene un nuevo conjunto de API de GitHub para obtener estadísticas interesantes.
Consulte " CRUD de archivos y repositorios estadísticas ya está disponible en el API "
Eso incluiría:
un pequeño script que he escrito que calcula fusionar estadísticas (útil cuando se trata con un flujo de trabajo basado en características de rama). Aquí está un ejemplo de salida de un pequeño repositorio:
[$]> git merge-stats
% of Total Merges Author # of Merges % of Commits
57.14 Daniel Beardsley 4 5.63
42.85 James Pearson 3 30.00
Vea este proyecto gitstat
Aquí es un simple script en ruby que he utilizado para obtener autor, las líneas añadidas, líneas eliminado, y se comprometen a contar desde el git.No se compromete a cubrir a lo largo del tiempo.
Tenga en cuenta que tengo un truco donde se ignora commit que agrega/quita más de 10.000 líneas porque supongo que este es un código de importación de algún tipo, no dude en modificar la lógica de sus necesidades.Usted puede poner la siguiente en un archivo llamado gitstats-simple.rb y, a continuación, ejecute
git log --numstat --pretty='%an' | ruby gitstats-simple.rb
contenido de gitstats-simple.rb
#!/usr/bin/ruby
# takes the output of this on stdin: git log --numstat --prety='%an'
map = Hash.new{|h,k| h[k] = [0,0,0]}
who = nil
memo = nil
STDIN.read.split("\n").each do |line|
parts = line.split
next if parts.size == 0
if parts[0].match(/[a-z]+/)
if who && memo[0] + memo[1] < 2000
map[who][0] += memo[0]
map[who][1] += memo[1]
map[who][2] += 1
end
who = parts[0]
memo = [0,0]
next
end
if who
memo[0]+=line[0].to_i
memo[1]+=parts[1].to_i
end
end
puts map.to_a.map{|x| [x[0], x[1][0], x[1][1], x[1][2]]}.sort_by{|x| -x[1] - x[2]}.map{|x|x.inspect.gsub("[", "").gsub("]","")}.join("\n")
DataHero ahora hace que sea fácil de introducir datos Github y obtener estadísticas. La usamos internamente para seguir nuestro progreso en cada hito.
https://datahero.com/partners/github/
¿Cómo lo usamos internamente: https: / /datahero.com/blog/2013/08/13/managing-github-projects-with-datahero/
Divulgación: Yo trabajo para DataHero
Puede utilizar la gema gitlogged ( https://github.com/dexcodeinc/gitlogged ) para obtener actividades por autor y fecha. Esto le dará informe como este:
gitlogged 2016-04-25 2016-04-26
que devuelve la siguiente salida
################################################################
Date: 2016-04-25
Yunan (4):
fix attachment form for IE (#4407)
fix (#4406)
fix merge & indentation attachment form
fix (#4394) unexpected after edit wo
gilang (1):
#4404 fix orders cart
################################################################
################################################################
Date: 2016-04-26
Armin Primadi (2):
Fix document approval logs controller
Adding git tool to generate summary on what each devs are doing on a given day for reporting purpose
Budi (1):
remove validation user for Invoice Processing feature
Yunan (3):
fix attachment in edit mode (#4405) && (#4430)
fix label attachment on IE (#4407)
fix void method (#4427)
gilang (2):
Fix show products list in discussion summary
#4437 define CApproved_NR status id in order
################################################################
https://stackoverflow.com/a/18797915/3243930 . la salida es mucho cerrado a los datos del gráfico de github.
#!/usr/bin/ruby
# takes the output of this on stdin: git log --numstat --prety='%an'
map = Hash.new{|h,k| h[k] = [0,0,0]}
who = nil
memo = nil
STDIN.read.split("\n").each do |line|
parts = line.split("\t")
next if parts.size == 0
if parts[0].match(/[a-zA-Z]+|[^\u0000-\u007F]+/)
if who
map[who][0] += memo[0]
map[who][1] += memo[1]
if memo[0] > 0 || memo[1] > 0
map[who][2] += 1
end
end
who = parts[0]
memo = [0,0]
next
end
if who
memo[0]+=parts[0].to_i
memo[1]+=parts[1].to_i
end
end
puts map.to_a.map{|x| [x[0], x[1][0], x[1][1], x[1][2]]}.sort_by{|x| -x[1] - x[2]}.map{|x|x.inspect.gsub("[", "").gsub("]","")}.join("\n")