Lassen Sie uns Git-Cat mit Python bauen

Python ist besser als ich erwartet hatte

Was ist Git-Cat?

git-cat ist ein einzelnes Programm von cat-file, einem der git-Befehle, mit dem git-Objekte (die unter .git / objects /) auf eine Weise angezeigt werden, die für die Benutzer leicht verständlich ist. Ich dachte, es könnte beim Erstellen eines Git-Viewers mit PHP verwendet werden, also entschied ich mich, es mit Python zu erstellen, worauf ich in letzter Zeit neugierig war.

Übersicht über das Git-Objekt

Dateibaum

Aufgrund der Natur des Git-Versionsverwaltungssystems hat es eine etwas spezielle Struktur. Ich werde die Details anderen detaillierteren Leuten überlassen, aber um Git-Cat zu machen, brauche ich einige der folgenden.

Wenn Sie die obige Datei öffnen, wird eine 40-stellige Hexadezimalzahl angezeigt. Dies ist der neueste Commit-Hash für diesen Zweig. (Der Grund für die Verwendung von Hash ist, dass die Wahrscheinlichkeit einer Kollision äußerst gering ist.) Im Folgenden fand ich es vielleicht unangenehm, eine große Anzahl von Dateien aus 40-stelligen Hashes zu haben, die in die ersten 2 Ziffern + die restlichen 38 Ziffern zerlegt wurden, so dass die ersten 2 Ziffern in gewissem Umfang als Verzeichnisname verwendet werden. Es ist geworden. (Trotzdem bin ich nicht der einzige, der denkt, dass es schmutzig ist)

Ich werde es zuerst lesen

Selbst wenn Sie die Datei so öffnen, wie sie ist, wird nur eine Liste von Zeichen angezeigt, die Sie nicht verstehen. Der Grund ist, dass es sich bei allen um Zeichenfolgen handelt, die von zlib komprimiert wurden. Also entpacken wir es zuerst.

#!/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)

Speichern Sie dies an einem geeigneten Ort, überprüfen Sie, ob zlib für Python bereit ist, und versuchen Sie dann "./git-cat xxx / .git / objects / 00/112233445566778899aabbccddeeff00112233". Dies ist sinnvoll. Ich denke, es wurde als bestimmte Zeichenkette angezeigt.

Ich möchte mehr wissen

Wenn Sie verschiedene Dateien ausprobieren, werden Sie feststellen, dass am Anfang immer Bezeichner (?) Und Zahlen wie Baum und Festschreiben vorhanden sind und jeder Inhalt nach dem Einfügen von \ 0 eingegeben wird. Ich fragte mich, ob es eine Erklärung für dieses oder etwas anderes gab, und als ich es nachschlug, hatte ich das Glück, eine Seite namens http://linquize.blogspot.hk/2011/10/supplemental-information-for-git.html zu finden. Es ist vollständig. Ich werde den Code weglassen, weil ich nur die Zeichenfolgen verarbeiten muss, aber es war einfacher als ich erwartet hatte. Wenn Sie es auf diese Weise schaffen, können Sie den Python / PHP-Wrapper von git relativ einfach erstellen.

Recommended Posts

Lassen Sie uns Git-Cat mit Python bauen
Erstellen Sie eine Python3-Umgebung mit Ubuntu 16.04
Erstellen Sie mit direnv eine Python-Umgebung
Schreiben wir Python mitinema4d.
Erstellen Sie Python 1.0
Lassen Sie uns eine GUI mit Python erstellen.
Erstellen Sie eine MySQL + Python-Umgebung mit Docker
Lass uns mit Python mit Python spielen [Anfänger]
Erstellen Sie mlpy mit python3.3 (64bit) (Windows 64bit)
Lassen Sie uns mit Python Image Scraping durchführen
Erstellen Sie automatisch eine Python-Dokumentation mit Sphinx
Erstellen Sie Vim mit MinGW. (+ lua, + python)
Lassen Sie uns die Stimme mit Python # 1 FFT analysieren
Lassen Sie uns eine probabilistische Ausbreitungsmethode (Python) erstellen.
FizzBuzz in Python3
Scraping mit Python
Lassen Sie uns mit Python ein Shiritori-Spiel machen
Erstellen Sie mit Docker eine Jupyter Lab (Python) -Umgebung
Statistik mit Python
Scraping mit Python
Python mit Go
Erstellen wir mit Python eine kostenlose Gruppe
Twilio mit Python
In Python integrieren
Spielen Sie mit 2016-Python
[Einführung in Python] Verwenden wir foreach mit Python
AES256 mit Python
Lesen wir die RINEX-Datei mit Python ①
Getestet mit Python
Lassen Sie uns mit Python langsam sprechen
Python beginnt mit ()
Erstellen Sie eine Python-Umgebung mit Anaconda auf einem Mac
mit Syntax (Python)
Bingo mit Python
Zundokokiyoshi mit Python
Lassen Sie uns MySQL-Daten mit Python bearbeiten
Erstellen Sie mit pyenv eine virtuelle Umgebung für Python
Erstellen Sie ein Webframework mit Python! (1)
Machen wir einen Twitter-Bot mit Python!
Erstellen Sie mit Neovim eine moderne Python-Umgebung
Lassen Sie uns mit Python 1 einen Investitionsalgorithmus entwickeln
Kommen wir zu Python # 0 (Umgebungskonstruktion)
Aufbau einer KI / maschinellen Lernumgebung mit Python
Erstellen Sie ein Webframework mit Python! (2)
Excel mit Python
Mikrocomputer mit Python
[Blender x Python] Beginnen wir mit Blender Python !!
Mit Python besetzen
Lösen wir simultane lineare Gleichungen mit Python Sympy!
Erstellen Sie eine Python-Entwicklungsumgebung mit Visual Studio Code
Erstellen Sie eine Python-Umgebung mit ansible auf centos6
Schreiben wir FizzBuzz mit einem Fehler: Python-Version
[Python] Erstellen Sie mit Docker eine Django-Entwicklungsumgebung
Erstellen Sie mit Sublime Text3 eine Python3-Build-Umgebung
[AWS] Erstellen wir einen ECS-Cluster mit CDK
Lassen Sie uns EV3-Motoren und -Sensoren mit Python steuern
Erstellen einer Python-Umgebung mit OSX Elcapitan
Erstellen Sie mit IntelliJ schnell eine Python Django-Umgebung