it-swarm.com.de

Welche Git-Commit-Statistiken sind leicht zu ziehen

Zuvor hatte ich die Fähigkeit von TortoiseSvn genossen, einfache Commit-Statistiken für ein bestimmtes SVN-Repository zu erstellen. Ich frage mich, was in Git verfügbar ist und bin besonders interessiert an:

  • Anzahl der Commits pro Benutzer
  • Anzahl der Zeilen, die pro Benutzer geändert wurden
  • zeitliche Aktivität (zum Beispiel aggregierte wöchentliche Änderungen)

Irgendwelche Ideen? 

87

Eigentlich hat git bereits einen Befehl dafür:

git shortlog

in Ihrem Fall klingt es so, als ob Sie an dieser Form interessiert sind:

git shortlog -sne

Siehe --help für verschiedene Optionen.

Sie könnten auch am GitStats-Projekt interessiert sein. Sie haben einige Beispiele, einschließlich der Statistiken für das Git-Projekt . Von der GitStat-Hauptseite:

Hier ist eine Liste einiger Statistiken, die derzeit generiert werden:

  • Allgemeine Statistiken: Gesamtdateien, Zeilen, Commits, Autoren.
  • Aktivität: Festschreiben nach Tageszeit, Wochentag, Wochenstunde, Monat, Jahr und Monat und Jahr.
  • Autoren: Liste der Autoren (Name, Commits (%), Datum des ersten Commits, Datum des letzten Commits, Alter), Autor des Monats, Autor des Jahres.
  • Dateien: Anzahl der Dateien nach Datum, Erweiterungen
  • Zeilen: Codezeilen nach Datum
186
Pat Notz

Erstens müssen Sie nichts (wie in network pull) pull ziehen, da sich das gesamte Repository und die gesamte Historie lokal befinden. Ich bin mir ziemlich sicher, dass es Tools gibt, die Ihnen Statistiken liefern, aber manchmal können Sie mit den Befehlszeilen nur kreativ sein. Zum Beispiel erhalten Sie (nur aus meinem Kopf heraus) die Anzahl der Commits pro Benutzer:

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

Bei anderen Statistiken, nach denen Sie gefragt haben, müssen Sie möglicherweise mehr darüber nachdenken. Möglicherweise möchten Sie die verfügbaren Tools anzeigen. Googeln für git statistics zeigt auf das GitStats - Tool, mit dem ich keine Erfahrung habe und noch weniger Ahnung davon habe, was nötig ist, um es unter Windows laufen zu lassen, aber Sie können es versuchen.

Danke an Hacker für die Beantwortung dieser Frage. Ich habe jedoch festgestellt, dass diese modifizierten Versionen für meine spezielle Verwendung besser geeignet sind:

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

(mit awk, da ich nicht auf meinem Mac gawk habe und mit dem meisten aktiven Comitter oben sortiere.) Es gibt eine Liste wie folgt aus:

 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

Das beste Werkzeug, das ich bisher identifiziert habe, ist Gitinspector. Es gibt den eingestellten Bericht pro Benutzer, pro Woche usw

Sie können wie folgt mit npm installieren

npm install -g gitinspector

Details zu den Links finden Sie unten

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

beispielbefehle sind 

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

usw

Beachten Sie, dass wenn sich Ihr Repo auf GitHub befindet, Sie jetzt (Mai 2013) über einen neuen Satz von GitHub-API verfügen, um interessante Statistiken zu erhalten.
Siehe " Datei-CRUD- und Repository-Statistiken jetzt in der API verfügbar "

Das würde umfassen:

2
VonC

Es gibt Möglichkeiten, Statistiken für einen bestimmten Zweig oder zwei Hashwerte zu erhalten. 

schlüssel hier ist die Fähigkeit, HASH..HASH zu tun

Im Folgenden verwende ich den ersten Hash von einem Zweig zum HEAD, der das Ende dieses Zweigs ist.

Gesamte Commits in einer Zweigstelle anzeigen

  • git log FIRST_HASH..HEAD --pretty = oneline | wc -l
  • Ausgabe 53

Gesamte Commits pro Autor anzeigen

  • git shortlog FIRST_HASH..HEAD -sne
  • Ausgabe 
  • 24 Name des Autors
  • 9 Name des Autors
2
jhanifen

Ich habe ein kleines Shell-Skript geschrieben, das Zusammenführungsstatistiken berechnet (nützlich bei einem auf Funktionszweigen basierenden Arbeitsablauf). Hier ein Beispiel für ein kleines Repository:

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

Hier ist ein einfaches Ruby-Skript, mit dem ich Autor, Zeilen hinzugefügt, Zeilen entfernt und die Anzahl der Commits von git festgeschrieben hat. Commits im Zeitverlauf werden nicht abgedeckt.

Beachten Sie, dass ich einen Trick habe, bei dem alle Commits ignoriert werden, die mehr als 10.000 Zeilen hinzufügen/entfernen, da ich davon ausgehe, dass es sich hierbei um einen Codeimport handelt. Sie können das Folgende in eine Datei namens gitstats-simple.rb einfügen und dann ausführen

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

inhalt von 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

Siehe dieses gitstat-Projekt

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

1
Lee jung.seung

Ändern Sie https://stackoverflow.com/a/18797915/3243930 . die Ausgabe ist viel zu den Graphdaten von github geschlossen.

#!/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 macht es jetzt einfach, Github-Daten einzulesen und Statistiken zu erhalten . Wir verwenden sie intern, um den Fortschritt jedes Meilensteins zu verfolgen.

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

So verwenden wir es intern: https://datahero.com/blog/2013/08/13/managing-github-projects-with-datahero/

Offenlegung: Ich arbeite für DataHero

0
ibash

Sie können gitlogged gem ( https://github.com/dexcodeinc/gitlogged ) verwenden, um Aktivitäten nach Autor und Datum abzurufen. So erhalten Sie einen Bericht wie folgt:

gitlogged 2016-04-25 2016-04-26

was die folgende Ausgabe zurückgibt

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

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