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?

War es hilfreich?

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

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

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")
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top