Quelles sont les expériences des gens avec l'un des modules Git pour Python? (Je connais GitPython, PyGit et Dulwich - n'hésitez pas à en mentionner d'autres si vous en connaissez.)
J'écris un programme qui devra interagir (ajouter, supprimer, valider) avec un référentiel Git, mais je n'ai aucune expérience avec Git, donc l'une des choses que je recherche est la facilité d'utilisation / compréhension de Git.
Les autres choses qui m'intéressent principalement sont la maturité et l'exhaustivité de la bibliothèque, un manque raisonnable de bogues, le développement continu et l'utilité de la documentation et des développeurs.
Si vous pensez à quelque chose d'autre que je pourrais souhaiter / avoir besoin de savoir, n'hésitez pas à le mentionner.
Réponses:
Bien que cette question ait été posée il y a quelque temps et que je ne connaisse pas l'état des bibliothèques à ce stade, il convient de mentionner aux chercheurs que GitPython fait un bon travail d'abstraction des outils de ligne de commande afin que vous n'ayez pas besoin d'utiliser sous-processus. Il existe des abstractions intégrées utiles que vous pouvez utiliser, mais pour tout le reste, vous pouvez faire des choses comme:
Tout le reste dans GitPython facilite simplement la navigation. Je suis assez satisfait de cette bibliothèque et j'apprécie qu'il s'agit d'un wrapper sur les outils git sous-jacents.
MISE À JOUR : Je suis passé à l'utilisation du module sh non seulement pour git, mais aussi pour la plupart des utilitaires de ligne de commande dont j'ai besoin en python. Pour reproduire ce qui précède, je le ferais à la place:
la source
repo.git.branch(b=somebranch)
fonctionne maisrepo.git.branch(D=somebranch)
ne fonctionne pas car il manque un espace). Je suppose que je vais implémenter moi-même une fonction générale basée sur un sous-processus. Je suis triste, j'avais de grands espoirs. : - /git = sh.git.bake(_cwd=repopath)
. cela fonctionne à merveille.J'ai pensé que je répondrais à ma propre question, car je prends un chemin différent de celui suggéré dans les réponses. Néanmoins, merci à ceux qui ont répondu.
Tout d'abord, un bref résumé de mes expériences avec GitPython, PyGit et Dulwich:
De plus, StGit semble intéressant, mais j'aurais besoin de la fonctionnalité extraite dans un module séparé et je ne veux pas attendre que cela se produise maintenant.
En (beaucoup) moins de temps que j'ai passé à essayer de faire fonctionner les trois modules ci-dessus, j'ai réussi à faire fonctionner les commandes git via le module de sous-processus, par exemple
Ce n'est pas encore totalement intégré à mon programme, mais je n'anticipe pas de problème, sauf peut-être la vitesse (puisque je traiterai parfois des centaines voire des milliers de fichiers).
Peut-être que je n'avais tout simplement pas la patience de faire avancer les choses avec Dulwich ou GitPython. Cela dit, j'espère que les modules bénéficieront de plus de développement et seront bientôt plus utiles.
la source
Je recommanderais pygit2 - il utilise les excellentes liaisons libgit2
la source
pygit2
est une bibliothèque vraiment utile, et j'ai hâte qu'elle s'agrandisse à l'avenir!libgit
etpygit2
, en prenant la source de GitHub. Le problème est que les branches principales ont des tests cassés et la dernière installation échoue «stable» ... Pas une solution appropriée si la fiabilité est importante et que vous devez déployer dans une variété d'environnements ... :(C'est une question assez ancienne, et en cherchant des bibliothèques Git, j'en ai trouvé une qui a été faite cette année (2013) appelée Gittle .
Cela a très bien fonctionné pour moi (là où les autres que j'ai essayés étaient floconneux) et semble couvrir la plupart des actions courantes.
Quelques exemples du README:
la source
git add other1.txt other2.txt
pour qu'elle ne suive pas ce à quoi on s'attend.Peut-être que cela aide, mais Bazaar et Mercurial utilisent tous les deux dulwich pour leur interopérabilité Git.
Dulwich est probablement différent de l'autre en ce sens qu'il s'agit d'une réimplémentation de git en python. L'autre pourrait simplement être un wrapper autour des commandes de Git (il pourrait donc être plus simple à utiliser d'un point de vue de haut niveau: commit / add / delete), cela signifie probablement que leur API est très proche de la ligne de commande de git, vous aurez donc besoin pour acquérir de l'expérience avec Git.
la source
Par souci d'exhaustivité, http://github.com/alex/pyvcs/ est une couche d'abstraction pour tous les dvcs. Il utilise dulwich, mais fournit une interopérabilité avec les autres dvcs.
la source
Une réponse mise à jour reflétant les temps modifiés:
GitPython est actuellement le plus simple à utiliser. Il prend en charge l'encapsulation de nombreuses commandes de plomberie git et possède une base de données d'objets enfichables (dulwich étant l'un d'entre eux), et si une commande n'est pas implémentée, fournit une API facile pour la transmission à la ligne de commande. Par exemple:
Cela appelle:
Dulwich est également bon niveau mais bien inférieur. C'est un peu pénible à utiliser car cela nécessite d'opérer sur des objets git au niveau de la plomberie et n'a pas de belle porcelaine que vous voudriez normalement faire. Cependant, si vous prévoyez de modifier une partie de git ou d'utiliser git-receive-pack et git-upload-pack, vous devez utiliser dulwich.
la source
Voici une implémentation très rapide de "git status":
la source
git status
git status --short
serait plus facile, et je pense que la--short
sortie est moins susceptible de changer.git status --porcelain
pour cela--porcelain: Give the output in a stable, easy-to-parse format for scripts...
--z
place de--porcelain
. Contrairement à--porcelain
,--z
n'échappe pas aux noms de fichiers.La réponse de PTBNL est tout à fait parfaite pour moi. Je fais un peu plus pour l'utilisateur Windows.
la source
La partie bibliothèque d'interaction git de StGit est en fait assez bonne. Cependant, ce n'est pas un package séparé, mais s'il y a suffisamment d'intérêt, je suis sûr que cela peut être corrigé.
Il a de très belles abstractions pour représenter les commits, les arbres, etc., et pour créer de nouveaux commits et arbres.
la source
Pour mémoire, aucune des bibliothèques Git Python susmentionnées ne semble contenir d'équivalent "git status", ce qui est vraiment la seule chose que je voudrais car traiter le reste des commandes git via un sous-processus est si facile.
la source