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/
Mach Folgendes:
# easy_install GitPython
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.
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 |
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".
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)
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.
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