不再保留砂礫。檢查堅固耐用。
Grit 可讓您透過 Ruby 對 Git 儲存庫進行物件導向的讀取/寫入存取。主要目標是穩定性和性能。為此,與 Git 儲存庫的一些互動是透過呼叫系統的git
指令來完成的,而其他互動則是透過核心 Git 功能的純 Ruby 重新實作來完成的。然而,這種選擇對最終用戶來說是透明的,您不需要知道正在使用哪種方法。
該軟體是為 GitHub 提供支援而開發的,應該被視為生產就緒。提供了廣泛的測試套件來驗證其正確性。
Grit 由 Tom Preston-Werner、Scott Chacon、Chris Wanstrath 和 PJ Hyett 維護。
從 Grit 2.3 開始,本文檔是準確的。
最簡單的安裝是透過 RubyGems:
$ gem install grit
Grit 的 Git 儲存庫可在 GitHub 上找到,可在以下位置瀏覽:
http://github.com/mojombo/grit
並克隆:
git clone git://github.com/mojombo/grit.git
您將需要這些寶石才能通過測試:
如果您想破解 Grit,請按照以下說明進行操作。若要取得所有依賴項,請先安裝 gem。
rake
確保一切仍然通過Grit 可讓您存取 Git 儲存庫的物件模型。建立Repo
物件後,您可以遍歷它以查找父提交、樹、blob 等。
第一步是建立一個Grit::Repo
物件來表示您的儲存庫。在本文檔中,我包含了Grit
模組以減少打字。
require 'grit'
repo = Grit::Repo.new("/Users/tom/dev/grit")
在上面的範例中,目錄/Users/tom/dev/grit
是我的工作目錄,包含.git
目錄。您也可以使用裸存儲庫初始化 Grit。
repo = Repo.new("/var/git/grit.git")
從Repo
物件中,您可以獲得作為Commit
物件陣列的提交清單。
repo.commits
# => [#<Grit::Commit "e80bbd2ce67651aa18e57fb0b43618ad4baf7750">,
#<Grit::Commit "91169e1f5fa4de2eaea3f176461f5dc784796769">,
#<Grit::Commit "038af8c329ef7c1bae4568b98bd5c58510465493">,
#<Grit::Commit "40d3057d09a7a4d61059bca9dca5ae698de58cbe">,
#<Grit::Commit "4ea50f4754937bf19461af58ce3b3d24c77311d9">]
當不帶參數呼叫時, Repo#commits
會傳回主分支可存取的最多 10 個提交的清單(從最新提交開始)。您可以要求從不同的分支、提交、標籤等開始提交。
repo.commits('mybranch')
repo.commits('40d3057d09a7a4d61059bca9dca5ae698de58cbe')
repo.commits('v0.1')
您可以指定要傳回的最大提交數。
repo.commits('master', 100)
如果需要分頁,可以指定要跳過的提交數量。
repo.commits('master', 10, 20)
上面將從提交清單中傳回 21-30 的提交。
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"
您可以透過連結呼叫#parents
來遍歷提交的祖先。
repo.commits.first.parents[0].parents[0].parents[0]
上面對應於 Git 術語中的master^^^或master~3 。
樹記錄指向目錄內容的指標。假設您想要主分支上最新提交的根樹。
tree = repo.commits.first.tree
# => #<Grit::Tree "3536eb9abac69c3e4db583ad38f3d30f8db4771f">
tree.id
# => "3536eb9abac69c3e4db583ad38f3d30f8db4771f"
一旦你擁有了一棵樹,你就可以獲得其中的內容。
contents = tree.contents
# => [#<Grit::Blob "4ebc8aea50e0a67e000ba29a30809d0a7b9b2666">,
#<Grit::Blob "81d2c27608b352814cbe979a6acd678d30219678">,
#<Grit::Tree "c3d07b0083f01a6e1ac969a0f32b8d06f20c62e5">,
#<Grit::Tree "4d00fe177a8407dbbc64a24dbfc564762c0922d8">]
該樹包含兩個Blob
物件和兩個Tree
物件。樹是子目錄,blob 是檔案。根以下的樹具有附加屬性。
contents.last.name
# => "lib"
contents.last.mode
# => "040000"
有一個方便的方法可以讓您從樹中取得命名的子物件。
tree / "lib"
# => #<Grit::Tree "e74893a3d8a25cbb1367cf241cc741bfd503c4b2">
如果您知道樹的名稱,也可以直接從儲存庫取得樹。
repo.tree
# => #<Grit::Tree "master">
repo.tree("91169e1f5fa4de2eaea3f176461f5dc784796769")
# => #<Grit::Tree "91169e1f5fa4de2eaea3f176461f5dc784796769">
一個 blob 代表一個檔案。樹木通常含有斑點。
blob = tree.contents.first
# => #<Grit::Blob "4ebc8aea50e0a67e000ba29a30809d0a7b9b2666">
Blob 具有某些屬性。
blob.id
# => "4ebc8aea50e0a67e000ba29a30809d0a7b9b2666"
blob.name
# => "README.txt"
blob.mode
# => "100644"
blob.size
# => 7726
您可以取得字串形式的 blob 資料。
blob.data
# => "Grit is a library to ..."
如果您知道 Blob 的名稱,也可以直接從儲存庫取得該 Blob。
repo.blob("4ebc8aea50e0a67e000ba29a30809d0a7b9b2666")
# => #<Grit::Blob "4ebc8aea50e0a67e000ba29a30809d0a7b9b2666">
還有更多可用的 API 方法,此處未記錄。更多功能請參考代碼。
版權所有 (c) 2010 湯姆普雷斯頓-沃納。有關詳細信息,請參閱許可證。