Pergunta

Anteriormente, eu gostei da capacidade do Tortoisesvn de gerar estatísticas de comprometimento simples para um determinado repositório SVN. Eu me pergunto o que está disponível no Git e estou particularmente interessado em:

  • Número de commits por usuário
  • Número de linhas alteradas por usuário
  • atividade ao longo do tempo (por exemplo, alterações semanais agregadas)

Alguma ideia?

Foi útil?

Solução

Na verdade, Git já tem um comando para isso:

git shortlog

No seu caso, parece que você está interessado neste formulário:

git shortlog -sne

Veja o --help Para várias opções.

Você também pode estar interessado no Projeto Gitstats. Eles têm alguns exemplos, incluindo o Estatísticas para o projeto Git. Na página principal do GitStat:

Aqui está uma lista de algumas estatísticas geradas atualmente:

  • Estatísticas gerais: Total de arquivos, linhas, commits, autores.
  • Atividade: Cometidos por hora do dia, dia da semana, hora da semana, mês do ano, ano e mês e ano.
  • Autores: Lista de autores (nome, Commits (%), primeira data de comprometimento, última data de confirmação, idade), autor do mês, autor do ano.
  • Arquivos: contagem de arquivos por data, extensões
  • Linhas: linhas de código por data

Outras dicas

Primeiro, você não precisa puxar Qualquer coisa (como na rede de rede), porque você tem todo o repositório e toda a história localmente. Tenho certeza de que existem ferramentas que oferecem estatísticas, mas às vezes você pode ser criativo com as linhas de comando. Por exemplo, isso (apenas fora da minha cabeça) fornecerá o número de commits por usuário:

git log --pretty=format:%ae \
| gawk -- '{ ++c[$0]; } END { for(cc in c) printf "%5d %s\n",c[cc],cc; }'

Outras estatísticas que você pediu podem precisar de mais pensamento. Você pode querer ver as ferramentas disponíveis. Pesquisando no Google git statistics aponta para o GitStats Ferramenta, com a qual não tenho experiência e ainda menos idéia do que é preciso para executá -lo no Windows, mas você pode tentar.

A melhor ferramenta até agora que eu identifiquei é o Gitinspector. Dá o relatório definido por usuário, por semana etc.

Você pode instalar como abaixo com o npm

npm install -g gitinspector

Detalhes para obter os links estão abaixo

https://www.npmjs.com/package/gitinspector
https://github.com/ejwa/gitinspector/wiki/Documentation
https://github.com/ejwa/gitinspector

Exemplo de comandos são

gitinspector -lmrTw
gitinspector --since=1-1-2017

etc.

Obrigado a Hacker por responder a esta pergunta. No entanto, achei essas versões modificadas melhores para o meu uso específico:

git log --pretty=format:%an \
| awk '{ ++c[$0]; } END { for(cc in c) printf "%5d %s\n",c[cc],cc; }'\
| sort -r

(Usando o AWK como eu não tenho Gawk no meu Mac e classificando com o comitter mais ativo no topo.) Ele produz uma lista como assim:

 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

Aqui estão maneiras de obter estatísticas para uma filial ou dois hashs específicos.

Chave aqui é a capacidade de fazer hash .. Hash

Abaixo, estou usando o primeiro hash de um ramo à cabeça que é o fim desse ramo.

Mostrar total commits em uma filial

  • Git LOG FURN_HASH..HEAD --TTY = ONELINE | wc -l
  • Saída 53

Mostrar total commits por autor

  • git shortlog primeiro_hash..head -sne
  • Resultado
  • 24 Nome do autor
  • 9 Nome do autor

Observe que, Se o seu repo estiver no github, você agora (maio de 2013) tem um novo conjunto de API do GitHub para obter estatísticas interessantes.
Ver "Arquivo Crud e estatísticas do repositório agora disponíveis na API"

Isso incluiria:

eu escrevi um pequeno script de concha Isso calcula as estatísticas de mesclagem (úteis ao lidar com um fluxo de trabalho baseado em ramo de recursos). Aqui está um exemplo de saída em um pequeno repositório:

[$]> 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

Veja este projeto GitStat

http://mirror.celinuxforum.org/gitstat/

Aqui está um script rubi simples que eu costumava obter para o autor, as linhas adicionadas, as linhas removidas e o comprometimento da contagem do Git. Não cobre comprometimentos ao longo do tempo.

Observe que eu tenho um truque em que ele ignora qualquer confirmação que adiciona/remove mais de 10.000 linhas, porque presumo que isso seja um tipo de importação de código, fique à vontade para modificar a lógica para suas necessidades. Você pode colocar o abaixo em um arquivo chamado gitstats-simple.rb e depois executar

git log --numstat --pretty='%an' | ruby gitstats-simple.rb

Conteúdo 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")

O DataHero agora facilita a extração de dados do GitHub e obtém estatísticas. Nós o usamos internamente para acompanhar nosso progresso em cada marco.

https://datahero.com/partners/github/

Como o usamos internamente: https://datahero.com/blog/2013/08/13/managing-github-projects-with-datahero/

Divulgação: eu trabalho para datahero

Você pode usar gem Gitlogged (https://github.com/dexcodeinc/gitlogged) para obter atividades por autor e data. Isso lhe dará relatório assim:

gitlogged 2016-04-25 2016-04-26

que retorna a seguinte saída

################################################################

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


################################################################

Modificar https://stackoverflow.com/a/18797915/3243930. A saída é muito fechada para os dados gráficos do 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 em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top