web-dev-qa-db-fra.com

Quelles statistiques Git commit sont faciles à extraire

Auparavant, j'ai apprécié la capacité de TortoiseSvn à générer des statistiques de validation simples pour un référentiel SVN donné. Je me demande ce qui est disponible dans Git et je suis particulièrement intéressé par:

  • Nombre de commits par utilisateur
  • Nombre de lignes modifiées par utilisateur
  • activité dans le temps (par exemple, changements hebdomadaires agrégés)

Des idées? 

87
Jesper Rønn-Jensen

En fait, git a déjà une commande pour ça:

git shortlog

dans votre cas, il semble que vous soyez intéressé par ce formulaire:

git shortlog -sne

Voir le --help pour différentes options.

Vous pouvez également être intéressé par le projet GitStats . Ils ont quelques exemples, y compris les stats pour le projet Git . Depuis la page principale de GitStat:

Voici une liste de certaines statistiques générées actuellement:

  • Statistiques générales: nombre total de fichiers, lignes, commits, auteurs.
  • Activité: commet par heure de la journée, jour de la semaine, heure de la semaine, mois de l’année, année et mois et année.
  • Auteurs: liste des auteurs (nom, commits (%), date de début, date de dernier engagement, âge), auteur du mois, auteur de l'année.
  • Fichiers: nombre de fichiers par date, extensions
  • Lignes: lignes de code par date
186
Pat Notz

Tout d’abord, vous n’avez pas besoin de pull (comme dans le réseau), car vous avez le référentiel entier et l’historique localement. Je suis à peu près sûr que certains outils vous fourniront des statistiques, mais vous pouvez parfois être créatif avec les lignes de commande. Par exemple, ceci (juste pour sortir de ma tête) vous donnera le nombre de commits par utilisateur:

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

D'autres statistiques que vous avez demandées peuvent nécessiter plus de réflexion. Vous voudrez peut-être voir les outils disponibles. Googler pour git statistics pointe vers l'outil GitStats , que je n'ai aucune expérience et encore moins d'idée de ce qu'il faut pour que cela fonctionne sous Windows, mais vous pouvez essayer.

24

Merci au pirate d’avoir répondu à cette question. Cependant, j’ai trouvé que ces versions modifiées étaient mieux adaptées à mon usage particulier:

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

(en utilisant awk car je n'ai pas de gawk sur mon mac, et en triant avec le comitter le plus actif en haut.)

 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
6
Jesper Rønn-Jensen

Le meilleur outil que j'ai identifié jusqu'à présent est gitinspector. Il donne le rapport défini par utilisateur, par semaine, etc.

Vous pouvez installer comme ci-dessous avec npm

npm install -g gitinspector

Les détails pour obtenir les liens sont ci-dessous

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

des exemples de commandes sont 

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

etc

Notez que si votre référentiel est sur GitHub, vous avez maintenant (mai 2013) un nouvel ensemble d'API GitHub pour obtenir des statistiques intéressantes.
Voir " Fichier des statistiques CRUD et de référentiel maintenant disponibles dans l'API "

Cela comprend:

2
VonC

Voici différentes manières d'obtenir des statistiques pour une branche spécifique ou deux hashs. 

la clé ici est la capacité de faire HASH..HASH

Ci-dessous, j'utilise le premier hachage d'une branche jusqu'au HEAD, qui correspond à la fin de cette branche.

Afficher les commits totaux dans une branche

  • journal git FIRST_HASH..HEAD --pretty = oneline | wc -l
  • Sortie 53

Afficher le total des commits par auteur

  • git shortlog FIRST_HASH..HEAD -sne
  • Sortie 
  • 24 Nom de l'auteur
  • 9 Nom de l'auteur
2
jhanifen

J'ai écrit un petit script shell qui calcule les statistiques de fusion (utile pour traiter un flux de travail basé sur une branche). Voici un exemple de sortie sur un petit référentiel:

[$]> 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
2
Xiong Chiamiov

Voici un script Ruby simple que j'ai utilisé pour obtenir l'auteur, les lignes ajoutées, les lignes supprimées et le nombre de validations de git. Il ne couvre pas les commits au fil du temps.

Notez que j’ai un truc qui ignore tout commit qui ajoute/supprime plus de 10 000 lignes car je suppose qu’il s’agit d’une importation de code, n'hésitez pas à modifier la logique selon vos besoins. Vous pouvez mettre le fichier ci-dessous dans un fichier nommé gitstats-simple.rb, puis exécuter

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

contenu 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")
1
Cliff Frey
1
Lee jung.seung

Modifier https://stackoverflow.com/a/18797915/3243930 . la sortie est très proche des données graphiques 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")
0
Jimmy Shen

DataHero facilite désormais l'extraction de données Github et l'obtention de statistiques .. Nous les utilisons en interne pour suivre nos progrès à chaque jalon.

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

Comment nous l'utilisons en interne: https://datahero.com/blog/2013/08/13/managing-github-projects-with-datahero/

Divulgation: Je travaille pour DataHero

0
ibash

Vous pouvez utiliser gitlogged gem ( https://github.com/dexcodeinc/gitlogged ) pour obtenir des activités par auteur et par date. Cela vous donnera un rapport comme ceci:

gitlogged 2016-04-25 2016-04-26

qui renvoie la sortie suivante

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

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


################################################################
0
Armin Primadi