Analyser le journal de validation Git en Python

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/

Installation

Procédez comme suit:

# easy_install GitPython

échantillon

Énumérer une liste de commits pour un référentiel donné

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.

Principales propriétés de 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

Structure principale de l'arbre

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".

Échantillon final

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)

Résumé

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.

référence

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

Analyser le journal de validation Git en Python
Analyser le journal des validations de Subversion en Python
Encapsulation des opérations git en Python
Analyse CSS avec cssutils en Python
Caractères Python déformés dans l'environnement Windows + Git Bash
Quadtree en Python --2
Python en optimisation
CURL en Python
Métaprogrammation avec Python
Python 3.3 avec Anaconda
SendKeys en Python
Époque en Python
Discord en Python
Allemand en Python
DCI en Python
tri rapide en python
nCr en python
N-Gram en Python
Programmation avec Python
Constante en Python
FizzBuzz en Python
Sqlite en Python
Étape AIC en Python
LINE-Bot [0] en Python
CSV en Python
Assemblage inversé avec Python
Réflexion en Python
Constante en Python
nCr en Python.
format en python
Scons en Python 3
Puyopuyo en python
python dans virtualenv
PPAP en Python
Quad-tree en Python
Réflexion en Python
Chimie avec Python
Hashable en Python
DirectLiNGAM en Python
LiNGAM en Python
Aplatir en Python
Aplatir en python
Liste triée en Python
AtCoder # 36 quotidien avec Python
Texte de cluster en Python
AtCoder # 2 tous les jours avec Python
Daily AtCoder # 32 en Python
Daily AtCoder # 6 en Python
Daily AtCoder # 18 en Python
Modifier les polices en Python
Motif singleton en Python
Opérations sur les fichiers en Python
Lire DXF avec python
Daily AtCoder # 53 en Python
Séquence de touches en Python
Utilisez config.ini avec Python
Daily AtCoder # 33 en Python
Résoudre ABC168D en Python