Python est meilleur que ce à quoi je m'attendais
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é.
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)
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.
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