Grit wird nicht mehr gepflegt. Schauen Sie sich Rugged an.
Grit bietet Ihnen über Ruby objektorientierten Lese-/Schreibzugriff auf Git-Repositorys. Die Hauptziele sind Stabilität und Leistung. Zu diesem Zweck werden einige der Interaktionen mit Git-Repositorys durch Shelling an den git
Befehl des Systems durchgeführt, während andere Interaktionen mit reinen Ruby-Reimplementierungen der Kernfunktionen von Git erfolgen. Diese Wahl ist jedoch für Endbenutzer transparent und Sie müssen nicht wissen, welche Methode verwendet wird.
Diese Software wurde für GitHub entwickelt und sollte als produktionsbereit betrachtet werden. Zur Überprüfung der Richtigkeit steht eine umfangreiche Testsuite zur Verfügung.
Grit wird von Tom Preston-Werner, Scott Chacon, Chris Wanstrath und PJ Hyett gepflegt.
Diese Dokumentation ist ab Grit 2.3 korrekt.
Die einfachste Installation erfolgt über RubyGems:
$ gem install grit
Das Git-Repo von Grit ist auf GitHub verfügbar und kann hier durchsucht werden:
http://github.com/mojombo/grit
und geklont mit:
git clone git://github.com/mojombo/grit.git
Sie benötigen diese Edelsteine, um Tests zu bestehen:
Wenn Sie Grit hacken möchten, befolgen Sie diese Anweisungen. Um alle Abhängigkeiten zu erhalten, installieren Sie zuerst das Gem.
rake
ausführen Mit Grit erhalten Sie Objektmodellzugriff auf Ihre Git-Repositorys. Sobald Sie ein Repo
-Objekt erstellt haben, können Sie es durchlaufen, um übergeordnete Commits, Bäume, Blobs usw. zu finden.
Der erste Schritt besteht darin, ein Grit::Repo
Objekt zu erstellen, um Ihr Repo darzustellen. In diese Dokumentation füge ich das Grit
Modul hinzu, um die Eingabe zu reduzieren.
require 'grit'
repo = Grit::Repo.new("/Users/tom/dev/grit")
Im obigen Beispiel ist das Verzeichnis /Users/tom/dev/grit
mein Arbeitsverzeichnis und enthält das .git
-Verzeichnis. Sie können Grit auch mit einem Bare-Repo initialisieren.
repo = Repo.new("/var/git/grit.git")
Vom Repo
-Objekt können Sie eine Liste von Commits als Array von Commit
-Objekten abrufen.
repo.commits
# => [#<Grit::Commit "e80bbd2ce67651aa18e57fb0b43618ad4baf7750">,
#<Grit::Commit "91169e1f5fa4de2eaea3f176461f5dc784796769">,
#<Grit::Commit "038af8c329ef7c1bae4568b98bd5c58510465493">,
#<Grit::Commit "40d3057d09a7a4d61059bca9dca5ae698de58cbe">,
#<Grit::Commit "4ea50f4754937bf19461af58ce3b3d24c77311d9">]
Repo#commits
wird ohne Argumente aufgerufen und gibt eine Liste von bis zu zehn Commits zurück, die für den Hauptzweig erreichbar sind (beginnend mit dem letzten Commit). Sie können Commits ab einem anderen Zweig, Commit, Tag usw. anfordern.
repo.commits('mybranch')
repo.commits('40d3057d09a7a4d61059bca9dca5ae698de58cbe')
repo.commits('v0.1')
Sie können die maximale Anzahl der zurückzugebenden Commits angeben.
repo.commits('master', 100)
Wenn Sie Paging benötigen, können Sie eine Anzahl von Commits angeben, die übersprungen werden sollen.
repo.commits('master', 10, 20)
Das Obige gibt die Commits 21–30 aus der Commit-Liste zurück.
Commit
Objekte enthalten Informationen zu diesem Commit.
head = repo.commits.first
head.id
# => "e80bbd2ce67651aa18e57fb0b43618ad4baf7750"
head.parents
# => [#<Grit::Commit "91169e1f5fa4de2eaea3f176461f5dc784796769">]
head.tree
# => #<Grit::Tree "3536eb9abac69c3e4db583ad38f3d30f8db4771f">
head.author
# => #<Grit::Actor "Tom Preston-Werner <[email protected]>">
head.authored_date
# => Wed Oct 24 22:02:31 -0700 2007
head.committer
# => #<Grit::Actor "Tom Preston-Werner <[email protected]>">
head.committed_date
# => Wed Oct 24 22:02:31 -0700 2007
head.message
# => "add Actor inspect"
Sie können die Herkunft eines Commits durchqueren, indem Sie Aufrufe an #parents
verketten.
repo.commits.first.parents[0].parents[0].parents[0]
Das Obige entspricht im Git-Sprachgebrauch „master^^^“ oder „master~3“ .
Ein Baum zeichnet Zeiger auf den Inhalt eines Verzeichnisses auf. Nehmen wir an, Sie möchten den Stammbaum des letzten Commits im Hauptzweig .
tree = repo.commits.first.tree
# => #<Grit::Tree "3536eb9abac69c3e4db583ad38f3d30f8db4771f">
tree.id
# => "3536eb9abac69c3e4db583ad38f3d30f8db4771f"
Sobald Sie einen Baum haben, können Sie den Inhalt erhalten.
contents = tree.contents
# => [#<Grit::Blob "4ebc8aea50e0a67e000ba29a30809d0a7b9b2666">,
#<Grit::Blob "81d2c27608b352814cbe979a6acd678d30219678">,
#<Grit::Tree "c3d07b0083f01a6e1ac969a0f32b8d06f20c62e5">,
#<Grit::Tree "4d00fe177a8407dbbc64a24dbfc564762c0922d8">]
Dieser Baum enthält zwei Blob
-Objekte und zwei Tree
-Objekte. Die Bäume sind Unterverzeichnisse und die Blobs sind Dateien. Bäume unterhalb der Wurzel haben zusätzliche Attribute.
contents.last.name
# => "lib"
contents.last.mode
# => "040000"
Es gibt eine praktische Methode, mit der Sie ein benanntes Unterobjekt aus einem Baum abrufen können.
tree / "lib"
# => #<Grit::Tree "e74893a3d8a25cbb1367cf241cc741bfd503c4b2">
Sie können einen Baum auch direkt aus dem Repo beziehen, wenn Sie seinen Namen kennen.
repo.tree
# => #<Grit::Tree "master">
repo.tree("91169e1f5fa4de2eaea3f176461f5dc784796769")
# => #<Grit::Tree "91169e1f5fa4de2eaea3f176461f5dc784796769">
Ein Blob repräsentiert eine Datei. Bäume enthalten oft Kleckse.
blob = tree.contents.first
# => #<Grit::Blob "4ebc8aea50e0a67e000ba29a30809d0a7b9b2666">
Ein Blob hat bestimmte Attribute.
blob.id
# => "4ebc8aea50e0a67e000ba29a30809d0a7b9b2666"
blob.name
# => "README.txt"
blob.mode
# => "100644"
blob.size
# => 7726
Sie können die Daten eines Blobs als Zeichenfolge abrufen.
blob.data
# => "Grit is a library to ..."
Sie können einen Blob auch direkt aus dem Repo abrufen, wenn Sie seinen Namen kennen.
repo.blob("4ebc8aea50e0a67e000ba29a30809d0a7b9b2666")
# => #<Grit::Blob "4ebc8aea50e0a67e000ba29a30809d0a7b9b2666">
Es stehen viele weitere API-Methoden zur Verfügung, die hier nicht dokumentiert sind. Weitere Funktionen finden Sie im Code.
Copyright (c) 2010 Tom Preston-Werner. Weitere Informationen finden Sie unter LIZENZ.