ver restaurar pendientes oneline modificados log eliminar commits archivos git statistics logging code-statistics

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")



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 ################################################################