Analysieren Sie das Git-Commit-Protokoll in Python

In diesem Artikel werde ich erklären, wie das GIT-Commit-Protokoll mit GitPython of Python analysiert wird.

Voraussetzung ist, -Git muss installiert sein. -Es muss Python 2.7-Serie sein. Es scheint derzeit nicht mit Python 3.3 kompatibel zu sein (als Ziel festgelegt)

Entwicklungsquelle https://github.com/gitpython-developers/GitPython

Dokument http://pythonhosted.org/GitPython/0.3.2/

Installation

Mach Folgendes:

# easy_install GitPython

Stichprobe

Führen Sie eine Liste der Commits für ein bestimmtes Repository auf

Das folgende Beispiel ist ein Skript, das eine Liste von Hash-IDs von Commits im angegebenen Repository und den Klassennamen ausgibt, in dem die Commit-Informationen gespeichert sind.

# -*- coding: utf-8 -*-
from git import *

repo = Repo("/share/testgit/searchTwitter")
for item in repo.iter_commits('master', max_count=100):
  print(item.hexsha)
  print(item.__class__)

Geben Sie für Repo den Pfad zu Ihrem lokalen Repository ein. Im Gegensatz zu zentralisierten Managementsystemen wie Subversion enthält GIT alle Informationen, die für das Konfigurationsmanagement lokal erforderlich sind. Alle diese Informationen werden im Ordner .git des Repositorys gespeichert.

Wenn Sie diesen Befehl ausführen, lautet die Festschreibungsinformation git.objects.commit.Commit.

Haupteigenschaften von Commit

Name Erläuterung
author Die Person, die ursprünglich die Arbeit gemacht hat
authored_date Datum und Uhrzeit des Autors
author_tz_offset Zeitzonenversatz des Autors
committer Die Person, die die Arbeit angewendet hat
committed_date Datum und Uhrzeit des Committers
committer_tz_offset Committer-Zeitzonenversatz
message Nachricht festschreiben
summary Erste Zeile der Festschreibungsnachricht
stats Statistische Informationen aus Diff. Statistiken.Die Informationen der aktualisierten Datei werden in Dateien gespeichert.
parents Eltern werdengit.objects.commit.CommitListe von. Das erste Commit ist die Abwesenheit eines Elternteils. Damit können Sie eine Festschreibungsreihenfolge erstellen.
tree Baumstrukturierte Daten, in denen Blobs gespeichert werden.TreeIn der Klasse definiert

Hauptstruktur des Baumes

Daten, die die Baumstruktur darstellen. Tree In der Klasse definiert.

Da tree.blobs alle Blobs enthält, die zum Baum gehören, können Sie alle mit dem Commit verknüpften Blobs extrahieren, indem Sie wie folgt rekursiv aufrufen.

def show_tree(tree, indent):
  """
Informationen zum Ausgabebaum
  """
  print ('%shexsha :%s' % (indent, tree.hexsha))
  print ('%spath :%s' % (indent, tree.path))
  print ('%sabspath :%s' % (indent, tree.abspath))
  print ('%smode :%s' % (indent, tree.mode))
  for t in tree.trees:
    show_tree(t, indent + '  ')

  print ('%s[blobs]' % indent)
  for b in tree.blobs:
    show_blob(b, indent + '  ')

Blob stellt den tatsächlichen Inhalt der Datei dar und wird durch den SHA-1-Hash benannt, der aus seiner Größe und seinem Inhalt berechnet wird.

Außerdem ist der dem Festschreibungsbaum zugeordnete Blob nicht nur derjenige, der sich geändert hat, sondern alle ihm zugeordneten Dateien. Diejenigen, die sich nicht geändert haben, werden mit demselben Hashwert wie das vorherige Commit gespeichert, und diejenigen, die sich geändert haben, werden mit unterschiedlichen Hashwerten gespeichert. ..

Sie können sehen, dass Git "Schnappschüsse von Verzeichnissen aufbewahrt".

Endprobe

Das folgende Beispiel extrahiert die Commits des Repositorys und den Blob jedes Commits.

# -*- coding: utf-8 -*-
from git import *
import time

def show_blob(b, indent):
  """
Blob-Informationen ausgeben
  """
  print ('%s---------------' %(indent))
  print ('%shexsha:%s' % (indent,b.hexsha))
  print ('%smime_type:%s' % (indent,b.mime_type))
  print ('%spath:%s' %(indent,b.path))
  print ('%sabspath:%s' %(indent,b.abspath))

def show_tree(tree, indent):
  """
Informationen zum Ausgabebaum
  """
  print ('%shexsha :%s' % (indent, tree.hexsha))
  print ('%spath :%s' % (indent, tree.path))
  print ('%sabspath :%s' % (indent, tree.abspath))
  print ('%smode :%s' % (indent, tree.mode))
  for t in tree.trees:
    show_tree(t, indent + '  ')

  print ('%s[blobs]' % indent)
  for b in tree.blobs:
    show_blob(b, indent + '  ')

def show_commitlog(item):
  """
Commit-Informationen ausgeben
  """
  print ("hexsha %s" %item.hexsha)
  print (item.author)
  print (item.author_tz_offset)
  print (time.strftime("%a, %d %b %Y %H:%M", time.gmtime(item.committed_date)))
  print (item.committer)
  print (item.committer_tz_offset)
  print (item.encoding)
  print (item.message)
  print (item.name_rev)
  print (item.summary)
  print ('[stats]')
  print (item.stats.total)
  print (item.stats.files)
  print ('[parents]')
  for i in item.parents:
    print('  %s' % i.hexsha)

  print '[Tree]'
  show_tree(item.tree, '  ')
    

repo = Repo("/share/testgit/searchTwitter")
for item in repo.iter_commits('master', max_count=100):
  print ('================================')
  show_commitlog(item)

Zusammenfassung

Ich erklärte, dass Sie das Commit-Protokoll einfach analysieren können, indem Sie GitPython für das lokal geklonte Git-Repository verwenden.

Auf diese Weise kann erwartet werden, dass Statistiken über Commits im Repository erstellt und zur Unterstützung des Projektmanagements verwendet werden.

Referenz

GitPython Documentation https://pythonhosted.org/GitPython/0.3.2/index.html

__ Unsichtbare Kraft __ http://keijinsonyaban.blogspot.jp/2011/05/git.html

Git Book http://git-scm.com/book/ja/

Recommended Posts

Analysieren Sie das Git-Commit-Protokoll in Python
Analysieren Sie das Subversion-Commit-Protokoll in Python
Wrapping von Git-Operationen in Python
CSS-Analyse mit cssutils in Python
Verstümmelte Python-Zeichen in der Windows + Git Bash-Umgebung
Quadtree in Python --2
Python in der Optimierung
CURL in Python
Metaprogrammierung mit Python
Python 3.3 mit Anaconda
SendKeys in Python
Epoche in Python
Zwietracht in Python
Deutsch in Python
DCI in Python
Quicksort in Python
nCr in Python
N-Gramm in Python
Programmieren mit Python
Konstante in Python
FizzBuzz in Python
SQLite in Python
Schritt AIC in Python
LINE-Bot [0] in Python
CSV in Python
Reverse Assembler mit Python
Reflexion in Python
Konstante in Python
nCr in Python.
Format in Python
Scons in Python 3
Puyopuyo in Python
Python in Virtualenv
PPAP in Python
Quad-Tree in Python
Reflexion in Python
Chemie mit Python
Hashbar in Python
DirectLiNGAM in Python
LiNGAM in Python
In Python reduzieren
In Python flach drücken
Sortierte Liste in Python
Täglicher AtCoder # 36 mit Python
Clustertext in Python
AtCoder # 2 jeden Tag mit Python
Täglicher AtCoder # 32 in Python
Täglicher AtCoder # 6 in Python
Täglicher AtCoder # 18 in Python
Bearbeiten Sie Schriftarten in Python
Singleton-Muster in Python
Dateioperationen in Python
Lesen Sie DXF mit Python
Täglicher AtCoder # 53 in Python
Tastenanschlag in Python
Verwenden Sie config.ini mit Python
Täglicher AtCoder # 33 in Python
Löse ABC168D in Python