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?

Otros consejos

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

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")
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top