Jakie są doświadczenia ludzi z którymkolwiek z modułów Git dla Pythona? (Znam GitPython, PyGit i Dulwich - nie wahaj się wspomnieć o innych, jeśli je znasz.)
Piszę program, który będzie musiał wchodzić w interakcje (dodawać, usuwać, zatwierdzać) z repozytorium Git, ale nie mam doświadczenia z Git, więc jedną z rzeczy, których szukam, jest łatwość użytkowania / zrozumienia w odniesieniu do Git.
Innymi rzeczami, które interesują mnie przede wszystkim, są dojrzałość i kompletność biblioteki, rozsądny brak błędów, ciągły rozwój oraz przydatność dokumentacji i programistów.
Jeśli myślisz o czymś innym, co chciałbym / chciałbym wiedzieć, nie wahaj się o tym wspomnieć.
Odpowiedzi:
Chociaż to pytanie zostało zadane jakiś czas temu i nie znam stanu bibliotek w tamtym momencie, warto wspomnieć osobom wyszukującym, że GitPython dobrze radzi sobie z abstrakcją narzędzi wiersza poleceń, aby nie trzeba było używać podproces. Istnieje kilka użytecznych abstrakcji, których możesz użyć, ale w przypadku wszystkiego innego możesz wykonać takie czynności, jak:
Wszystko inne w GitPythonie po prostu ułatwia nawigację. Jestem dość zadowolony z tej biblioteki i doceniam, że jest ona opakowaniem podstawowych narzędzi git.
AKTUALIZACJA : Przerzuciłem się na używanie modułu sh dla nie tylko git, ale większości narzędzi wiersza poleceń, których potrzebuję w Pythonie. Aby powtórzyć powyższe, zrobiłbym to zamiast tego:
źródło
repo.git.branch(b=somebranch)
Działa, alerepo.git.branch(D=somebranch)
nie działa, ponieważ brakuje miejsca). Myślę, że sam zaimplementuję ogólną funkcję opartą na podprocesach. Jestem smutny, miałem duże nadzieje. : - /git = sh.git.bake(_cwd=repopath)
. działa niesamowicie.Pomyślałem, że odpowiem na własne pytanie, ponieważ podążam inną drogą niż sugerowano w odpowiedziach. Niemniej jednak dziękuję tym, którzy odpowiedzieli.
Najpierw krótkie streszczenie moich doświadczeń z GitPythonem, PyGit i Dulwich:
Również StGit wygląda interesująco, ale potrzebowałbym funkcji wyodrębnionej w osobnym module i nie chcę czekać, aż to się stanie teraz.
W (dużo) mniej czasu niż spędziłem na próbach uruchomienia trzech powyższych modułów, udało mi się uzyskać polecenia git działające za pośrednictwem modułu podprocesu, np.
Nie jest to jeszcze w pełni włączone do mojego programu, ale nie przewiduję problemu, może z wyjątkiem szybkości (ponieważ będę przetwarzać setki lub nawet tysiące plików czasami).
Może po prostu nie miałem cierpliwości, aby wszystko działało z Dulwich lub GitPythonem. To powiedziawszy, mam nadzieję, że moduły będą bardziej rozbudowywane i wkrótce będą bardziej przydatne.
źródło
Polecam pygit2 - wykorzystuje doskonałe libgit2 powiązania
źródło
pygit2
jest naprawdę użyteczną biblioteką i nie mogę się doczekać jej rozbudowy w przyszłości!libgit
ipygit2
, biorąc źródło z GitHub. Problem w tym, że główne gałęzie mają zepsute testy, a ostatnia "stabilna" instalacja zakończyła się niepowodzeniem ... Nie jest to odpowiednie rozwiązanie, jeśli ważna jest niezawodność i musisz wdrożyć w różnych środowiskach ... :(To dość stare pytanie i szukając bibliotek Git, znalazłem taką, która została stworzona w tym roku (2013) o nazwie Gittle .
Działało świetnie dla mnie (gdzie inne, których próbowałem, były niestabilne) i wydaje się, że obejmuje większość typowych działań.
Kilka przykładów z README:
źródło
git add other1.txt other2.txt
więc nie jest zgodna z oczekiwaniami.Może to pomaga, ale Bazaar i Mercurial używają Dulwich ze względu na interoperacyjność Git.
Dulwich prawdopodobnie różni się od innych w tym sensie, że jest to reimplementacja gita w Pythonie. Drugi może być po prostu otoką wokół poleceń Gita (więc może być prostszy w użyciu z wysokiego poziomu: zatwierdzanie / dodawanie / usuwanie), prawdopodobnie oznacza to, że ich API jest bardzo zbliżone do wiersza poleceń gita, więc będziesz potrzebować zdobyć doświadczenie z Git.
źródło
Ze względu na kompletność, http://github.com/alex/pyvcs/ jest warstwą abstrakcji dla wszystkich dvcs. Używa dulwich, ale zapewnia współdziałanie z innymi dvcs.
źródło
Zaktualizowana odpowiedź odzwierciedlająca zmienione czasy:
Obecnie GitPython jest najłatwiejszy w użyciu. Obsługuje zawijanie wielu poleceń git hydraulicznych i ma podłączalną bazę danych obiektów (jedną z nich jest dulwich), a jeśli polecenie nie jest zaimplementowane, zapewnia łatwy interfejs API do wyrzucania do wiersza poleceń. Na przykład:
To wywołuje:
Dulwich jest również dobry, ale znacznie niższy poziom. Jest to trochę uciążliwe w użyciu, ponieważ wymaga operowania na przedmiotach git na poziomie hydraulicznym i nie ma ładnej porcelany, którą normalnie chciałbyś zrobić. Jeśli jednak planujesz modyfikować jakąkolwiek część git lub używasz git-otrzymasz-pack i git-upload-pack, musisz użyć dulwich.
źródło
Oto naprawdę szybka implementacja „statusu git”:
źródło
git status
git status --short
byłoby łatwiejsze i myślę, że--short
wynik jest mniej prawdopodobny.git status --porcelain
do tego--porcelain: Give the output in a stable, easy-to-parse format for scripts...
--z
zamiast--porcelain
. W przeciwieństwie do--porcelain
,--z
nie zmienia znaczenia nazw plików.Odpowiedź PTBNL jest dla mnie idealna. Robię trochę więcej dla użytkownika Windows.
źródło
Część biblioteki interakcji git w StGit jest w rzeczywistości całkiem dobra. Nie jest to jednak oddzielny pakiet, ale jeśli jest wystarczające zainteresowanie, jestem pewien, że można to naprawić.
Ma bardzo ładne abstrakcje do reprezentowania zatwierdzeń, drzew itp. Oraz do tworzenia nowych zatwierdzeń i drzew.
źródło
Dla przypomnienia, żadna z wyżej wymienionych bibliotek Git Python nie wydaje się zawierać odpowiednika "git status", co jest jedyną rzeczą, jakiej bym chciał, ponieważ radzenie sobie z resztą poleceń git za pośrednictwem podprocesu jest tak łatwe.
źródło