Welche Erfahrungen haben die Leute mit einem der Git-Module für Python gemacht? (Ich kenne GitPython, PyGit und Dulwich - zögern Sie nicht, andere zu erwähnen, wenn Sie davon wissen.)
Ich schreibe ein Programm, das mit einem Git-Repository interagieren (hinzufügen, löschen, festschreiben) muss, aber keine Erfahrung mit Git habe. Eines der Dinge, die ich suche, ist die Benutzerfreundlichkeit / das Verständnis in Bezug auf Git.
Die anderen Dinge, die mich hauptsächlich interessieren, sind die Reife und Vollständigkeit der Bibliothek, ein angemessener Mangel an Fehlern, die Weiterentwicklung und die Hilfsbereitschaft der Dokumentation und der Entwickler.
Wenn Sie an etwas anderes denken, das ich wissen möchte / muss, können Sie es gerne erwähnen.
Antworten:
Obwohl diese Frage vor einiger Zeit gestellt wurde und ich den Status der Bibliotheken zu diesem Zeitpunkt noch nicht kenne, ist es für Suchende erwähnenswert, dass GitPython die Befehlszeilentools gut abstrahiert, sodass Sie sie nicht verwenden müssen Unterprozess. Es gibt einige nützliche eingebaute Abstraktionen, die Sie verwenden können, aber für alles andere können Sie Dinge tun wie:
Alles andere in GitPython erleichtert die Navigation. Ich bin ziemlich zufrieden mit dieser Bibliothek und weiß zu schätzen, dass sie ein Wrapper für die zugrunde liegenden Git-Tools ist.
UPDATE : Ich habe das sh-Modul nicht nur für Git, sondern für die meisten Befehlszeilenprogramme verwendet, die ich in Python benötige. Um das oben Gesagte zu replizieren, würde ich stattdessen Folgendes tun:
quelle
repo.git.branch(b=somebranch)
funktioniert,repo.git.branch(D=somebranch)
aber nicht, da ein Leerzeichen fehlt). Ich denke, ich werde selbst eine subprozessbasierte allgemeine Funktion implementieren. Ich bin traurig, ich hatte große Hoffnungen. : - /git = sh.git.bake(_cwd=repopath)
. es funktioniert super.Ich dachte, ich würde meine eigene Frage beantworten, da ich einen anderen Weg gehe als in den Antworten vorgeschlagen. Trotzdem danke an diejenigen, die geantwortet haben.
Zunächst eine kurze Zusammenfassung meiner Erfahrungen mit GitPython, PyGit und Dulwich:
Auch StGit sieht interessant aus, aber ich würde die Funktionalität in ein separates Modul extrahieren müssen und möchte nicht warten, bis dies jetzt geschieht.
In (viel) weniger Zeit, als ich damit verbracht habe, die drei oben genannten Module zum Laufen zu bringen, gelang es mir, Git-Befehle über das Unterprozessmodul zum Laufen zu bringen, z
Dies ist noch nicht vollständig in mein Programm integriert, aber ich erwarte kein Problem, außer vielleicht Geschwindigkeit (da ich manchmal Hunderte oder sogar Tausende von Dateien verarbeiten werde).
Vielleicht hatte ich einfach nicht die Geduld, mit Dulwich oder GitPython etwas in Gang zu bringen. Trotzdem bin ich zuversichtlich, dass die Module bald weiterentwickelt und nützlicher werden.
quelle
Ich würde pygit2 empfehlen - es verwendet die hervorragenden libgit2- Bindungen
quelle
pygit2
ist eine wirklich nützliche Bibliothek und ich freue mich darauf, sie in Zukunft zu erweitern!libgit
undpygit2
die Quelle von GitHub entnehmen. Das Problem ist, dass die Hauptzweige fehlerhafte Tests haben und die neueste "stabile" Installation fehlschlägt ... Keine geeignete Lösung, wenn Zuverlässigkeit wichtig ist und Sie in einer Vielzahl von Umgebungen bereitstellen müssen ... :(Dies ist eine ziemlich alte Frage, und als ich nach Git-Bibliotheken suchte, fand ich eine, die dieses Jahr (2013) mit dem Namen Gittle erstellt wurde .
Es hat großartig für mich funktioniert (wo die anderen, die ich ausprobiert habe, schuppig waren) und scheint die meisten gängigen Aktionen abzudecken.
Einige Beispiele aus der README:
quelle
git add other1.txt other2.txt
damit sie nicht den Erwartungen entspricht.Vielleicht hilft es, aber Bazaar und Mercurial verwenden beide Dulwich für ihre Git-Interoperabilität.
Dulwich ist wahrscheinlich anders als das andere in dem Sinne, dass es eine Neuimplementierung von Git in Python ist. Der andere ist möglicherweise nur ein Wrapper um die Befehle von Git (daher könnte die Verwendung unter einem höheren Gesichtspunkt einfacher sein: Festschreiben / Hinzufügen / Löschen). Dies bedeutet wahrscheinlich, dass sich die API sehr nahe an der Befehlszeile von Git befindet, sodass Sie diese benötigen Erfahrungen mit Git sammeln.
quelle
Der Vollständigkeit halber ist http://github.com/alex/pyvcs/ eine Abstraktionsschicht für alle DVDs. Es verwendet Dulwich, bietet aber Interop mit den anderen DVCs.
quelle
Eine aktualisierte Antwort, die geänderte Zeiten widerspiegelt:
GitPython ist derzeit am einfachsten zu bedienen. Es unterstützt das Umschließen vieler Git-Plumbing-Befehle und verfügt über eine steckbare Objektdatenbank (Dulwich ist eine davon). Wenn ein Befehl nicht implementiert ist, bietet es eine einfache API zum Ausgeben an die Befehlszeile. Beispielsweise:
Dies ruft auf:
Dulwich ist auch gut, aber viel niedriger. Die Verwendung ist etwas mühsam, da es erforderlich ist, Git-Objekte auf Sanitär-Ebene zu bearbeiten, und kein schönes Porzellan hat, das Sie normalerweise tun möchten. Wenn Sie jedoch Teile von Git ändern oder Git-Receive-Pack und Git-Upload-Pack verwenden möchten, müssen Sie Dulwich verwenden.
quelle
Hier ist eine wirklich schnelle Implementierung von "Git Status":
quelle
git status
git status --short
wäre einfacher, und ich denke, dass sich die--short
Ausgabe weniger wahrscheinlich ändert.git status --porcelain
für diese--porcelain: Give the output in a stable, easy-to-parse format for scripts...
--z
statt--porcelain
. Im Gegensatz zu--porcelain
,--z
nicht entkommt Dateinamen.Die Antwort von PTBNL ist perfekt für mich. Ich mache ein bisschen mehr für Windows-Benutzer.
quelle
Der Git-Interaktionsbibliotheksteil von StGit ist eigentlich ziemlich gut. Es wird jedoch nicht als separates Paket aufgeteilt, aber wenn genügend Interesse besteht, kann dies sicher behoben werden.
Es hat sehr schöne Abstraktionen zum Darstellen von Commits, Bäumen usw. und zum Erstellen neuer Commits und Bäume.
quelle
Für den Datensatz scheint keine der oben genannten Git Python-Bibliotheken ein "Git-Status" -Äquivalent zu enthalten, was wirklich das einzige ist, was ich möchte, da der Umgang mit den restlichen Git-Befehlen über einen Unterprozess so einfach ist.
quelle