2010-06-27 7 views
7

Ich suche nach einer Ruby- oder Python-Implementierung des Git-Clients, die verwendet werden kann, um Änderungen in einem lokalen Repository zu aktualisieren und zu committen.Git-Bibliothek für Ruby oder Python?

Ich bevorzuge, wenn die Bibliothek keine Shell-Befehle verwendet, sondern alles in "reinem Code" hält.

Gibt es welche?

Vielen Dank im Voraus.

Antwort

9

Es gibt auch Dulwich, eine Python-Implementierung der Git-Dateiformate und Protokolle.

6

Grit gibt Ihnen objektorientierten Lese-/Schreibzugriff auf Git-Repositorys über 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

Sie können ruby-git gem auschecken.

+0

von momentan (Oktober 2015) die am häufigsten verwendeten Wrapper für Git in Ruby. – mliebelt

3

Für Python gibt es die Dulwich Bibliothek, die @RyanWilcox bereits erwähnt.

Für Ruby gibt es leider keine Git-Bibliothek. Es gibt Grit, die eine Teilmenge von Git in Ruby implementiert und die Befehlszeilentools für einige zusätzliche Features umschließt, aber nur die Teilmenge von Git unterstützt, die GitHub benötigt. Und Sie könnten entweder JGit oder Git# über JRuby oder IronRuby verwenden.

0

GitPython hat eine objektorientierte API ähnlich wie 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">]