2011-08-19 17 views
6

Voglio scrivere un modulo in python (questo è il progetto di apprendimento) per migliorare la mia esperienza git. Esiste un modulo Python per vari comandi git? Almeno quelli di base (commit/diff/log/add)?Git commit da python

Ho visto GitPython ma non sono riuscito a trovare il supporto per (nuovo) commit; è più un framework di ricerca sul repository che un'interfaccia GIT completa. (O mi sono perso qualcosa?)

Inoltre, se esiste un modulo python per tutto questo, sarà preferibile o eseguendo i comandi della shell dal codice python?

risposta

10

In GitPython si create a commit from an index object.

In libgit2 si create a commit from a repository object.

Si potrebbe anche voler guardare in questa domanda:

+1

+1 per libgit2. –

+0

Grazie mille per il link "git python experience". Potrei essere in grado di basare la mia decisione su questo. – Sailesh

+0

Dovresti tenere a mente che (a causa della data) quelle risposte non menzionano i collegamenti Python basati su libgit2, che sono interessanti perché la libreria libgit2 è una libreria rientranti per interagire con i repository git. Inoltre, l'uso del modulo subprocess per invocare i comandi git (come suggerisce @Ferdinand Beyer) ha funzionato bene per me in molti script e potrebbe essere tutto ciò che serve. –

9

Git è progettato per essere costituito da "tubature" e "porcellana". I componenti idraulici costituiscono il sistema di base, di basso livello: gestione di oggetti, repository, telecomandi e così via. La porcellana, d'altra parte, significa strumenti di alto livello di facile utilizzo che utilizzano l'impianto idraulico.

Storicamente, solo le parti più fondamentali/prestazioni critiche (principalmente idraulici) sono state implementate in C, il resto ha usato script shell/perl. Per essere più portabile, sempre più codice è stato riscritto in C.

Con questo sfondo, mi sento di raccomandare di utilizzare semplicemente le chiamate di sistema all'eseguibile git per il vostro wrapping python. Considera il tuo codice come parte della porcellana di Git. Rispetto all'utilizzo di una biblioteca specializzata:

PRO

  • Non c'è bisogno di imparare un'API - utilizzare i comandi git si ha familiarità con
  • set completo di strumenti - è possibile utilizzare porcellana e non si limitano alla funzionalità di basso livello

CONTRA

  • È necessario analizzare l'output della riga di comando dalle chiamate git.
  • potrebbe essere più lento