Construisons git-cat avec Python

Python est meilleur que ce à quoi je m'attendais

Qu'est-ce que git-cat

git-cat est un programme unique de cat-file, qui est l'une des commandes git qui affiche les objets git (ceux sous .git / objects /) d'une manière facile à comprendre pour les gens. Je pensais qu'il pourrait être utilisé lors de la construction d'un visualiseur Git avec PHP, j'ai donc décidé de le construire avec Python, ce qui m'a récemment intéressé.

Vue d'ensemble de l'objet git

Arborescence des fichiers

En raison de la nature du système de gestion des versions git, il a une structure légèrement spéciale. Je vais laisser les détails à d'autres personnes plus détaillées, mais pour créer git-cat, j'ai besoin de certains des éléments suivants.

Si vous ouvrez le fichier ci-dessus, vous verrez un nombre hexadécimal à 40 chiffres. Il s'agit du dernier hachage de validation pour cette branche. (La raison de l'utilisation du hachage est que la possibilité de collision est extrêmement faible.) Ci-dessous, j'ai peut-être pensé qu'il était gênant d'avoir un grand nombre de fichiers composés de hachages à 40 chiffres, décomposés en les 2 premiers chiffres + les 38 chiffres restants, de sorte que les 2 premiers chiffres soient utilisés dans une certaine mesure comme nom de répertoire. Il est devenu. (Pourtant, je ne suis pas le seul à penser que c'est sale)

Je vais d'abord le lire

Même si vous ouvrez le fichier tel quel, seule une liste de caractères que vous ne comprenez pas apparaîtra. La raison en est que ce sont toutes des chaînes compressées par zlib. Alors décompressons-le d'abord.

#!/usr/bin/python
import zlib
import sys

if __name__ = "__main__":
    fname = sys.argv[1]
    fd = open(fname, "rb");
    line = fd.read()
    print zlib.decompress(line)

Enregistrez-le dans un emplacement approprié, assurez-vous que zlib est prêt pour Python, puis essayez ./git-cat xxx / .git / objects / 00 / 112233445566778899aabbccddeeff00112233, et cela a du sens. Je pense qu'il a été affiché comme une certaine chaîne de caractères.

Je veux en savoir plus

En essayant divers fichiers, vous constaterez qu'il y a toujours des identificateurs (?) Et des nombres tels que tree et commit au début, et chaque contenu est entré après que \ 0 soit inséré. Je me suis demandé s'il y avait une explication à ceci ou à quelque chose, et quand j'ai cherché, j'ai eu la chance de trouver une page appelée http://linquize.blogspot.hk/2011/10/supplemental-information-for-git.html. c'est complet. Je vais omettre le code car tout ce que j'ai à faire est de traiter la chaîne de caractères, mais c'était plus facile que prévu. Si vous le faites de cette manière, vous pouvez créer le wrapper python / PHP de git relativement facilement.

Recommended Posts

Construisons git-cat avec Python
Créer un environnement python3 avec ubuntu 16.04
Construire un environnement python avec direnv
Écrivons python avec cinema4d.
Construire Python 1.0
Faisons une interface graphique avec python.
Construire un environnement Mysql + Python avec docker
Jouons avec Excel avec Python [Débutant]
Construire mlpy avec python3.3 (64 bits) (Windows 64 bits)
Faisons du scraping d'images avec Python
Créer automatiquement la documentation Python avec Sphinx
Construisez Vim avec MinGW. (+ lua, + python)
Analysons la voix avec Python # 1 FFT
Construisons une méthode de propagation probabiliste (Python)
FizzBuzz en Python3
Grattage avec Python
Faisons un jeu de shiritori avec Python
Créer un environnement Jupyter Lab (Python) avec Docker
Statistiques avec python
Grattage avec Python
Python avec Go
Créons un groupe gratuit avec Python
Twilio avec Python
Intégrer avec Python
Jouez avec 2016-Python
[Introduction à Python] Utilisons foreach avec Python
AES256 avec python
Lisons le fichier RINEX avec Python ①
Testé avec Python
Faisons la voix lentement avec Python
python commence par ()
Créer un environnement Python avec Anaconda sur Mac
avec syntaxe (Python)
Bingo avec python
Zundokokiyoshi avec python
Faisons la manipulation des données MySQL avec Python
Créez un environnement virtuel pour python avec pyenv
Créez un framework Web avec Python! (1)
Faisons un bot Twitter avec Python!
Créez un environnement Python moderne avec Neovim
Développons un algorithme d'investissement avec Python 1
Entendons-nous bien avec Python # 0 (Construction de l'environnement)
Construction d'environnement AI / Machine Learning avec Python
Créez un framework Web avec Python! (2)
Excel avec Python
Micro-ordinateur avec Python
[Blender x Python] Commençons avec Blender Python !!
Cast avec python
Résolvons des équations linéaires simultanées avec Python sympy!
Créer un environnement de développement Python avec Visual Studio Code
Créez un environnement python avec ansible sur centos6
Écrivons FizzBuzz avec une erreur: Version Python
[Python] Créer un environnement de développement Django avec Docker
Créer un environnement de construction python3 avec Sublime Text3
[AWS] Construisons un cluster ECS avec CDK
Contrôlons les moteurs et capteurs EV3 avec Python
Construire un environnement Python avec OSX Elcapitan
Créez rapidement un environnement Python Django avec IntelliJ