restaurar - Qué estadísticas de commit de Git son fáciles de tirar
git ver archivos modificados (12)
Aquí hay formas de obtener estadísticas para una rama específica o dos hashs.
La clave aquí es la capacidad de hacer HASH..HASH
A continuación, estoy usando el primer hash de una rama a HEAD, que es el final de esa rama.
Mostrar confirmaciones totales en una rama
- git log FIRST_HASH..HEAD --pretty = oneline | wc -l
- Salida 53
Mostrar confirmaciones totales por autor
- git shortlog FIRST_HASH..HEAD -sne
- Salida
- 24 Nombre del autor
- 9 Nombre del autor
Anteriormente, he disfrutado de la capacidad de TortoiseSvn para generar estadísticas simples de commit para un repositorio SVN dado. Me pregunto qué hay disponible en Git y estoy particularmente interesado en:
- Número de confirmaciones por usuario
- Número de líneas cambiadas por usuario
- actividad a lo largo del tiempo (por ejemplo, cambios agregados semanales)
¿Algunas ideas?
Aquí hay un script simple de ruby que usé para obtener el autor, las líneas agregadas, las líneas eliminadas y el recuento de confirmaciones de git. No cubre compromisos a lo largo del tiempo.
Tenga en cuenta que tengo un truco donde ignora cualquier confirmación que agregue / elimine más de 10,000 líneas porque supongo que se trata de una importación de código de algún tipo, siéntase libre de modificar la lógica para sus necesidades. Puede poner lo siguiente en un archivo llamado gitstats-simple.rb y luego ejecutar
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 más fácil obtener datos de Github y obtener estadísticas. Lo 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: trabajo para DataHero
En primer lugar, no tiene que extraer nada (como en la extracción de red), porque tiene todo el repositorio y toda la historia a nivel local. Estoy bastante seguro de que hay herramientas que te darán estadísticas, pero a veces solo puedes ser creativo con las líneas de comando. Por ejemplo, esto (simplemente fuera de mi cabeza) te 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 solicite pueden necesitar más reflexión. Es posible que desee ver las herramientas disponibles. Google para git statistics
apunta a la herramienta GitStats
, con la que no tengo experiencia y aún menos idea de lo que se necesita para ejecutarla en Windows, pero puedes intentarlo.
En realidad, git ya tiene un comando para esto:
git shortlog
en su caso, parece que le interesa esta forma:
git shortlog -sne
Ver el --help
para varias opciones.
También puede estar interesado en el proyecto GitStats . Tienen algunos ejemplos, incluidas las estadísticas del proyecto Git . Desde la página principal de GitStat:
Aquí hay una lista de algunas estadísticas generadas actualmente:
- Estadísticas generales: total de archivos, líneas, confirmaciones, autores.
- Actividad: se compromete por hora del día, día de la semana, hora de la semana, mes del año, año y mes y año.
- Autores: lista de autores (nombre, confirmaciones (%), fecha de primer compromiso, fecha de último compromiso, edad), autor del mes, autor del año.
- Archivos: conteo de archivos por fecha, extensiones
- Líneas: líneas de código por fecha
Gracias a Hacker por responder esta pregunta. Sin embargo, encontré que estas versiones modificadas son mejores 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 ya que no tengo boquiabierto en mi mac, y clasificando con comitter activo en la parte superior). Muestra una lista como esta:
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
He escrito un pequeño script de shell que calcula las estadísticas de combinación (útil cuando se trata de un flujo de trabajo basado en una rama de características). Aquí hay un ejemplo de salida en 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
La mejor herramienta que identifiqué hasta ahora es gitinspector. Da el informe establecido por usuario, por semana, etc.
Puede instalar como a continuación con npm
npm install -g gitinspector
Detalles para obtener los enlaces están debajo
https://www.npmjs.com/package/gitinspector
https://github.com/ejwa/gitinspector/wiki/Documentation
https://github.com/ejwa/gitinspector
ejemplos de comandos son
gitinspector -lmrTw
gitinspector --since=1-1-2017
etc
Modificar https://.com/a/18797915/3243930 . la salida está muy cerrada para los datos de 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")
Puede usar gema gitlogged ( https://github.com/dexcodeinc/gitlogged ) para obtener actividades por autor y fecha. Esto le dará un 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
################################################################
Tenga en cuenta que, si su informe está en GitHub , ahora (mayo de 2013) tiene un nuevo conjunto de API de GitHub para obtener estadísticas interesantes.
Consulte " Archivo CRUD y estadísticas del repositorio ahora disponibles en la API "
Eso incluiría:
Ver este proyecto de gitstat