Python ist besser als ich erwartet hatte
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.
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)
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.
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