Dans cet article, j'expliquerai comment analyser le journal de validation GIT à l'aide de GitPython de Python.
Comme condition préalable, -Git doit être installé. -Il doit s'agir de la série Python 2.7. Il ne semble pas compatible avec Python 3.3 pour le moment (défini comme objectif)
Source de développement https://github.com/gitpython-developers/GitPython
document http://pythonhosted.org/GitPython/0.3.2/
Procédez comme suit:
# easy_install GitPython
L'exemple suivant est un script qui génère une liste des ID de hachage des validations dans le référentiel spécifié et le nom de classe qui stocke les informations de validation.
# -*- 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__)
Pour Repo, entrez le chemin d'accès à votre référentiel local. Contrairement aux systèmes de gestion centralisés comme Subversion, GIT contient toutes les informations nécessaires à la gestion de la configuration localement. Toutes ces informations sont stockées dans le dossier .git du référentiel.
Lorsque vous exécutez cette commande, les informations de validation seront git.objects.commit.Commit.
Nom | La description |
---|---|
author | La personne qui a fait le travail à l'origine |
authored_date | Date et heure de l'auteur |
author_tz_offset | décalage du fuseau horaire de l'auteur |
committer | La personne qui a appliqué le travail |
committed_date | date et heure du committer |
committer_tz_offset | décalage du fuseau horaire du committer |
message | Message de validation |
summary | Première ligne du message de validation |
stats | Informations statistiques créées à partir de Diff. Statistiques.Les informations du fichier mis à jour sont stockées dans des fichiers. |
parents | Devenir parentgit.objects.commit.CommitListe de. Le premier commit est l'absence d'un parent. Vous pouvez l'utiliser pour créer une commande de validation. |
tree | Données structurées en arborescence qui stockent des objets blob.TreeDéfini en classe |
Données qui représentent la structure arborescente. Tree Défini dans la classe.
Puisque tree.blobs contient tous les Blobs appartenant à l'arborescence, vous pouvez extraire tous les Blobs associés à la validation en appelant de manière récursive comme suit.
def show_tree(tree, indent):
"""
Informations sur l'arborescence de sortie
"""
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 représente le contenu réel du fichier et est nommé par le hachage SHA-1 calculé à partir de sa taille et de son contenu.
En outre, le Blob associé à l'arborescence de validation n'est pas seulement celui qui a changé, mais tous les fichiers y sont associés. Ceux qui n'ont pas changé sont stockés avec la même valeur de hachage que la validation précédente, et ceux qui ont changé sont stockés avec des valeurs de hachage différentes. ..
Vous verrez que Git "garde des instantanés des répertoires".
Voici un exemple qui extrait les validations du référentiel et extrait le Blob de chaque validation.
# -*- coding: utf-8 -*-
from git import *
import time
def show_blob(b, indent):
"""
Informations sur l'objet blob de sortie
"""
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):
"""
Informations sur l'arborescence de sortie
"""
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):
"""
Informations de validation de sortie
"""
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)
J'ai expliqué que vous pouvez facilement analyser le journal de validation en utilisant GitPython pour le référentiel Git cloné localement.
En utilisant cela, on peut s'attendre à ce que les statistiques des validations dans le référentiel soient créées et utilisées pour aider la gestion de projet.
GitPython Documentation https://pythonhosted.org/GitPython/0.3.2/index.html
__ Puissance invisible __ http://keijinsonyaban.blogspot.jp/2011/05/git.html
Git Book http://git-scm.com/book/ja/
Recommended Posts