Welche Git -Commit -Statistiken sind leicht zu ziehen?
-
18-09-2019 - |
Frage
Früher habe ich die Fähigkeit von Tortoisesvn genossen, einfache Commit -Statistiken für ein bestimmtes SVN -Repository zu generieren. Ich frage mich, was in Git verfügbar ist, und interessiert mich besonders für:
- Anzahl der Commits pro Benutzer
- Anzahl der geänderten Zeilen pro Benutzer
- Aktivität im Laufe der Zeit (zum Beispiel aggregierte wöchentliche Änderungen)
Irgendwelche Ideen?
Lösung
Tatsächlich hat Git dafür bereits einen Befehl:
git shortlog
In Ihrem Fall klingt es so, als ob Sie an dieser Form interessiert sind:
git shortlog -sne
Siehe das --help
für verschiedene Optionen.
Sie können auch an der interessiert sein GitStats -Projekt. Sie haben einige Beispiele, einschließlich der Statistiken für das Git -Projekt. Auf der Gitstat -Hauptseite:
Hier finden Sie eine Liste einiger Statistiken, die derzeit generiert wurden:
- Allgemeine Statistiken: Gesamtdateien, Zeilen, Commits, Autoren.
- Aktivität: Kommt nach Tag des Tages, der Woche der Woche, der Woche der Woche, des Jahres, des Jahres und des Monats und des Jahres.
- Autoren: Liste der Autoren (Name, Commits (%), First Commit Datum, Last Commit Datum, Alter), Autor des Monats, Autor des Jahres.
- Dateien: Dateianzahl nach Datum, Erweiterungen
- Zeilen: Codezeilen nach Datum
Andere Tipps
Erstens müssen Sie nicht ziehen Alles (wie im Netzwerk), weil Sie das gesamte Repository und die gesamte Geschichte lokal haben. Ich bin mir ziemlich sicher, dass es Tools gibt, die Ihnen Statistiken geben, aber manchmal können Sie mit den Befehlszeilen nur kreativ sein. Dies gibt Ihnen beispielsweise (nur aus meinem Kopf) 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; }'
Andere Statistiken, nach denen Sie gefragt haben, müssen möglicherweise mehr Gedanken darüber geben. Möglicherweise möchten Sie die verfügbaren Tools sehen. Googeln für git statistics
zeigt auf die GitStats
Tool, mit dem ich keine Erfahrung habe und noch weniger Vorstellung davon, was es braucht, um es auf Windows zu lief, aber Sie können es versuchen.
Das bisher beste Werkzeug, das ich identifiziert habe, ist Gitinspector. Es gibt den festgelegten Bericht pro Benutzer, pro Woche usw.
Sie können wie unten mit NPM installieren
npm install -g gitinspector
Details, um die Links zu erhalten, 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
etc
Vielen Dank an Hacker für die Beantwortung dieser Frage. Ich fand jedoch, dass diese modifizierten Versionen für meine spezielle Verwendung besser sind:
git log --pretty=format:%an \
| awk '{ ++c[$0]; } END { for(cc in c) printf "%5d %s\n",c[cc],cc; }'\
| sort -r
(Verwenden Sie awk, da ich nicht gawk auf meinem Mac habe und mit den meisten aktiven Comitter sortiert.) Es gibt eine Liste wie SO 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
Hier sind Möglichkeiten, Statistiken für ein bestimmtes Zweig oder zwei Hashs zu erhalten.
Schlüssel hier ist die Fähigkeit, Hash zu machen.
Unten benutze ich den ersten Hash von einem Zweig zum Kopf, der das Ende dieses Zweigs ist.
Zeigen Sie totale Commits in einer Filiale
- Git log first_hash..head --pretty = oneline | WC -l
- Ausgabe 53
Zeigen Sie den gesamten Commits pro Autor an
- Git Shortlog First_hash..head -sne
- Ausgabe
- 24 Autorenname
- 9 Autorenname
Beachten Sie, dass, Wenn Ihr Repo auf GitHub ist, Sie haben jetzt (Mai 2013) einen neuen Satz von Github -API, um interessante Statistiken zu erhalten.
Sehen "Datei -CRUD- und Repository -Statistiken, die jetzt in der API verfügbar sind"
Das würde einschließen:
Ich habe geschrieben ein kleines Shell -Skript Das berechnet die Zusammenführungsstatistiken (nützlich, wenn Sie mit einem Workflow auf Feature-Branch-basierten Merkmals zu tun haben). Hier ist eine Beispielausgabe auf einem kleinen 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
Siehe dieses Gitstat -Projekt
Hier ist ein einfaches Ruby -Skript, mit dem ich den Autor verwendet habe, Zeilen entfernt, Zeilen entfernt und von Git zählen. Es umfasst keine Commits im Laufe der Zeit.
Beachten Sie, dass ich einen Trick habe, bei dem es jedes Commit ignoriert, das mehr als 10.000 Zeilen hinzufügt/entfernt, da ich annehme, dass dies ein Code -Import irgendeiner Art ist, können Sie die Logik für Ihre Anforderungen ändern. Sie können das unten 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")
DataHero erleichtert nun einfach, Github -Daten einzuziehen und Statistiken zu erhalten. Wir verwenden es intern, um unsere Fortschritte auf jedem Meilenstein zu verfolgen.
https://datahero.com/partners/github/
Wie wir es intern benutzen: https://datahero.com/blog/2013/08/13/managing-github-projects-with-datahero/
Offenlegung: Ich arbeite für DataHero
Sie können Gitlogged Gem (verwendenhttps://github.com/dexcodeinc/gitlogged) Aktivitäten nach Autor und Datum. Dadurch erhalten Sie einen solchen Bericht:
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
################################################################
Ändern https://stackoverflow.com/a/18797915/3243930. Die Ausgabe ist für die Graphaten von GitHub viel 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")