2010-06-27 22 views
7

Estoy buscando una implementación Ruby o Python del cliente Git que se pueda usar para actualizar y confirmar cambios en un repositorio local.¿Biblioteca de Git para Ruby o Python?

Prefiero que la biblioteca no use comandos de shell pero mantiene todo en "código puro".

¿Hay alguno?

Gracias de antemano.

Respuesta

9

También hay Dulwich, una implementación de Python de los formatos de archivos y protocolos de Git.

6

Grit le ofrece acceso de lectura/escritura orientado a objetos a los repositorios de Git a través de Ruby.

require 'grit' 
include Grit 
repo = Repo.new("/Users/tom/dev/grit") 

repo.commits 
# => [#<Grit::Commit "e80bbd2ce67651aa18e57fb0b43618ad4baf7750">, 
     #<Grit::Commit "91169e1f5fa4de2eaea3f176461f5dc784796769">, 
     #<Grit::Commit "038af8c329ef7c1bae4568b98bd5c58510465493">, 
     #<Grit::Commit "40d3057d09a7a4d61059bca9dca5ae698de58cbe">, 
     #<Grit::Commit "4ea50f4754937bf19461af58ce3b3d24c77311d9">] 

... 
3

Para Python, existe la biblioteca Dulwich que @RyanWilcox ya mencionó.

Para Ruby, desafortunadamente no hay una biblioteca de Git. Hay Grit, que implementa un subconjunto de Git en Ruby y envuelve las herramientas de línea de comandos para algunas funciones adicionales, pero solo admite el subconjunto de Git que necesita GitHub. Y puede usar JGit o Git# a través de JRuby o IronRuby.

0

GitPython tiene un API orientado a objetos similares a Grit:

>>> #$ pip install GitPython 
>>> import git 
>>> repo = git.Repo('.') 
>>> repo.git_dir 
'/home/hobs/src/twip/.git' 
>>> repo.bare 
False 
>>> repo.untracked_files 
[u'twip/scripts.bak/__init__.py', 
u'twip/scripts.bak/cat_tweets.py', 
u'twip/scripts.bak/clean.py', 
u'twip/scripts.bak/explore.py', 
u'twip/scripts.bak/generate.py', 
u'twip/scripts.bak/plot_globe.py', 
u'twip/scripts.bak/skeleton.py'] 
>>> repo.head.ref 
<git.Head "refs/heads/master"> 
>>> repo.tags 
[<git.TagReference "refs/tags/0.0.1">, 
<git.TagReference "refs/tags/0.0.2">, 
<git.TagReference "refs/tags/0.0.3">] 
Cuestiones relacionadas