Quais são as experiências das pessoas com qualquer um dos módulos Git para Python? (Eu conheço GitPython, PyGit e Dulwich - fique à vontade para mencionar outras pessoas, se você souber delas.)
Estou escrevendo um programa que terá que interagir (adicionar, excluir, confirmar) com um repositório Git, mas não tem experiência com o Git, portanto, uma das coisas que estou procurando é a facilidade de uso / compreensão em relação ao Git.
As outras coisas nas quais estou interessado principalmente são maturidade e integridade da biblioteca, uma razoável falta de bugs, desenvolvimento contínuo e utilidade da documentação e dos desenvolvedores.
Se você pensa em outra coisa que eu queira / precise saber, sinta-se à vontade para mencionar.
Respostas:
Embora essa pergunta tenha sido feita há um tempo e eu não conheço o estado das bibliotecas naquele momento, vale a pena mencionar para os pesquisadores que o GitPython faz um bom trabalho abstraindo as ferramentas de linha de comando para que você não precise usar subprocesso. Existem algumas abstrações úteis úteis que você pode usar, mas para todo o resto você pode fazer coisas como:
Tudo o resto no GitPython facilita a navegação. Estou bastante satisfeito com esta biblioteca e compreendo que ela é um invólucro nas ferramentas git subjacentes.
UPDATE : Eu mudei para usar o módulo sh não apenas para o git, mas também para a maioria dos utilitários de linha de comando que eu preciso em python. Para replicar o acima, eu faria isso:
fonte
repo.git.branch(b=somebranch)
funciona, masrepo.git.branch(D=somebranch)
não, porque falta um espaço). Acho que vou implementar uma função geral baseada em subprocessos. Estou triste, tinha grandes esperanças. : - /git = sh.git.bake(_cwd=repopath)
. funciona incrivelmente.Pensei em responder minha própria pergunta, pois estou seguindo um caminho diferente do sugerido nas respostas. No entanto, obrigado a quem respondeu.
Primeiro, uma breve sinopse das minhas experiências com GitPython, PyGit e Dulwich:
Além disso, o StGit parece interessante, mas eu precisaria da funcionalidade extraída em um módulo separado e não quero esperar que isso aconteça agora.
Em (muito) menos tempo do que gastei tentando colocar os três módulos acima em funcionamento, consegui que os comandos git funcionassem através do módulo de subprocesso, por exemplo
Isso ainda não está totalmente incorporado ao meu programa, mas não estou prevendo um problema, exceto talvez a velocidade (já que processarei centenas ou até milhares de arquivos às vezes).
Talvez eu simplesmente não tenha paciência para fazer as coisas acontecerem com Dulwich ou GitPython. Dito isto, espero que os módulos tenham mais desenvolvimento e sejam mais úteis em breve.
fonte
Eu recomendaria pygit2 - ele usa as excelentes ligações libgit2
fonte
pygit2
é uma biblioteca realmente útil e espero que ela se expanda no futuro!libgit
epygit2
, retirando a fonte do GitHub. O problema é que as ramificações principais têm testes quebrados e a instalação mais recente com falha "estável" ... Não é uma solução adequada se a confiabilidade é importante e você precisa implantar em uma variedade de ambientes ... :(Essa é uma pergunta bastante antiga e, enquanto procurava por bibliotecas Git, encontrei uma que foi criada este ano (2013) chamada Gittle .
Funcionou muito bem para mim (onde os outros que eu tentei eram esquisitos) e parece cobrir a maioria das ações comuns.
Alguns exemplos do README:
fonte
git add other1.txt other2.txt
para que não seguisse o que seria esperado.Talvez ajude, mas Bazaar e Mercurial estão usando dulwich para sua interoperabilidade com o Git.
Dulwich provavelmente é diferente do outro no sentido de que é uma reimplementação do git em python. O outro pode ser apenas um invólucro dos comandos do Git (para que seja mais simples de usar de um ponto de vista de alto nível: confirmar / adicionar / excluir), provavelmente significa que a API está muito próxima da linha de comando do git, então você precisará para ganhar experiência com o Git.
fonte
Por uma questão de integridade, http://github.com/alex/pyvcs/ é uma camada de abstração para todos os dvcs. Ele usa dulwich, mas fornece interoperabilidade com os outros dvcs.
fonte
Uma resposta atualizada que reflete os tempos alterados:
Atualmente, o GitPython é o mais fácil de usar. Ele suporta o agrupamento de muitos comandos de canalização do git e possui um banco de dados de objetos conectável (dulwich é um deles) e, se um comando não for implementado, fornece uma API fácil para direcionar a linha de comando. Por exemplo:
Isso chama:
Dulwich também é bom, mas nível muito mais baixo. É um pouco difícil de usar, pois requer a operação em objetos git no nível do encanamento e não possui porcelana agradável que você normalmente gostaria de fazer. No entanto, se você planeja modificar qualquer parte do git ou usar o git-receive-pack e o git-upload-pack, precisará usar o dulwich.
fonte
Aqui está uma implementação muito rápida do "status git":
fonte
git status
git status --short
seria mais fácil e acho que--short
é menos provável que a saída mude.git status --porcelain
for this--porcelain: Give the output in a stable, easy-to-parse format for scripts...
--z
vez de--porcelain
. Ao contrário--porcelain
,--z
não escapa nomes de arquivos.A resposta do PTBNL é perfeita para mim. Eu faço um pouco mais para o usuário do Windows.
fonte
A parte da biblioteca de interação git do StGit é realmente muito boa. No entanto, não é dividido como um pacote separado, mas se houver interesse suficiente, tenho certeza de que isso pode ser corrigido.
Possui abstrações muito boas para representar confirmações, árvores, etc., e para criar novas confirmações e árvores.
fonte
Para o registro, nenhuma das bibliotecas Git Python mencionadas acima parece conter um equivalente "status git", o que é realmente a única coisa que eu gostaria, já que lidar com o restante dos comandos git via subprocesso é tão fácil.
fonte