È necessario utilizzare l'argomento short
di rev-parse
qui per generare lo SHA più piccolo in grado di identificare in modo univoco il commit. Fondamentalmente, lo short
chiamerà l'API git interna e restituirà la stringa di lunghezza più breve possibile per SHA, che può identificare in modo univoco il commit, anche se in breve hai passato un valore molto piccolo. Così in modo efficace, si può fare qualcosa di simile al di sotto, che vi darà la SHA più breve sempre (io uso short=1
sottolineare che):
In [1]: import git
In [2]: repo = git.Repo(search_parent_directories=True)
In [3]: sha = repo.head.object.hexsha
In [4]: short_sha = repo.git.rev_parse(sha, short=1)
In [5]: short_sha
Out[5]: u'd5afd'
Si può leggere more about this from the git side here. Inoltre, come menzionato nella man-page for git-rev-parse, --short per impostazione predefinita prendere 7 come valore, e minimo 4.
--short=number
Invece di emettere i valori completi SHA-1 dei nomi degli oggetti cercare di abbreviare a un nome univoco più breve. Quando non viene specificata alcuna lunghezza, viene utilizzato 7. La lunghezza minima è 4.
fonte
2015-08-12 06:42:59
Grazie. in realtà, non voglio usare il comando shell, perché rende lo script eseguito molto più lentamente .. forse la lunghezza fissa dell'hash funziona nella maggior parte dei casi, quindi lo userò. –
Hmm ... intendi il bombardamento diretto o l'uso del database git-command interno a 'gitpython'? Usando 'repo.git.revparse()' come ho suggerito il secondo, e dovrebbe essere molto veloce. Se la tua preoccupazione è il consumo di memoria o la generazione di nuovi proc, puoi invece usare 'git.Repo (odbt = GitDB)' per una soluzione pure-python, anche se viene eseguita 2-5 volte più lentamente. – lemonhead
Sembra che 'repo.head.object.hexsha' non chiami il comando shell, e questo è l'ideale. perché sto correggendo informazioni sullo stato di git per visualizzarlo nel prompt della shell. (quindi dovrebbe essere veloce) –