กรวดไม่ได้รับการบำรุงรักษาอีกต่อไป ตรวจสอบขรุขระ
Grit ช่วยให้คุณเข้าถึงการอ่าน/เขียนเชิงวัตถุไปยังที่เก็บ Git ผ่านทาง Ruby เป้าหมายหลักคือความมั่นคงและประสิทธิภาพ ด้วยเหตุนี้ การโต้ตอบบางส่วนกับที่เก็บ Git จึงทำได้โดยการเชลล์ออกไปที่คำสั่ง git
ของระบบ และการโต้ตอบอื่นๆ ทำได้ด้วยการปรับใช้ Ruby ใหม่ของฟังก์ชันหลักของ Git อย่างไรก็ตาม ตัวเลือกนี้มีความโปร่งใสสำหรับผู้ใช้ปลายทาง และคุณไม่จำเป็นต้องทราบว่ากำลังใช้วิธีใดอยู่
ซอฟต์แวร์นี้ได้รับการพัฒนาเพื่อขับเคลื่อน GitHub และควรถือว่าพร้อมสำหรับการผลิต มีชุดทดสอบที่ครอบคลุมเพื่อตรวจสอบความถูกต้อง
Grit ดูแลโดย Tom Preston-Werner, Scott Chacon, Chris Wanstrath และ PJ Hyett
เอกสารนี้มีความถูกต้อง ณ Grit 2.3
การติดตั้งที่ง่ายที่สุดคือผ่าน RubyGems:
$ gem install grit
Git repo ของ Grit มีให้บริการบน GitHub ซึ่งสามารถเรียกดูได้ที่:
http://github.com/mojombo/grit
และโคลนด้วย:
git clone git://github.com/mojombo/grit.git
คุณจะต้องใช้อัญมณีเหล่านี้เพื่อรับการทดสอบจึงจะผ่าน:
หากคุณต้องการแฮ็ก Grit ให้ทำตามคำแนะนำเหล่านี้ หากต้องการรับการขึ้นต่อกันทั้งหมด ให้ติดตั้งอัญมณีก่อน
rake
Grit ช่วยให้คุณเข้าถึงโมเดลวัตถุในที่เก็บ Git ของคุณได้ เมื่อคุณสร้างออบเจ็กต์ Repo
แล้ว คุณสามารถสำรวจมันเพื่อค้นหาคอมมิตพาเรนต์ ทรี หยด ฯลฯ
ขั้นตอนแรกคือการสร้างวัตถุ Grit::Repo
เพื่อเป็นตัวแทน repo ของคุณ ในเอกสารนี้ ฉันได้รวมโมดูล Grit
ไว้เพื่อลดการพิมพ์
require 'grit'
repo = Grit::Repo.new("/Users/tom/dev/grit")
ในตัวอย่างข้างต้น ไดเร็กทอรี /Users/tom/dev/grit
คือไดเร็กทอรีการทำงานของฉันและมีไดเร็กทอรี . .git
คุณยังสามารถเริ่มต้น Grit ด้วย repo เปล่าๆ ได้อีกด้วย
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
จะส่งคืนรายการคอมมิตสูงสุดสิบรายการที่สาขา หลัก เข้าถึงได้ (เริ่มจากคอมมิตล่าสุด) คุณสามารถขอการคอมมิตโดยเริ่มต้นที่สาขาอื่น คอมมิต แท็ก ฯลฯ
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]
ข้อความข้างต้นสอดคล้องกับ master^^^ หรือ master~3 ในสำนวน Git
ต้นไม้บันทึกตัวชี้ไปยังเนื้อหาของไดเร็กทอรี สมมติว่าคุณต้องการรูททรีของการคอมมิตล่าสุดบนสาขา หลัก
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
สองรายการ ต้นไม้เป็นไดเร็กทอรีย่อยและ blobs เป็นไฟล์ ต้นไม้ใต้รากมีคุณสมบัติเพิ่มเติม
contents.last.name
# => "lib"
contents.last.mode
# => "040000"
มีวิธีอำนวยความสะดวกที่ช่วยให้คุณได้รับวัตถุย่อยที่มีชื่อจากแผนผัง
tree / "lib"
# => #<Grit::Tree "e74893a3d8a25cbb1367cf241cc741bfd503c4b2">
คุณยังสามารถรับต้นไม้ได้โดยตรงจาก repo หากคุณทราบชื่อของมัน
repo.tree
# => #<Grit::Tree "master">
repo.tree("91169e1f5fa4de2eaea3f176461f5dc784796769")
# => #<Grit::Tree "91169e1f5fa4de2eaea3f176461f5dc784796769">
Blob แสดงถึงไฟล์ ต้นไม้มักมีหยด
blob = tree.contents.first
# => #<Grit::Blob "4ebc8aea50e0a67e000ba29a30809d0a7b9b2666">
หยดมีคุณสมบัติบางอย่าง
blob.id
# => "4ebc8aea50e0a67e000ba29a30809d0a7b9b2666"
blob.name
# => "README.txt"
blob.mode
# => "100644"
blob.size
# => 7726
คุณสามารถรับข้อมูลของหยดเป็นสตริงได้
blob.data
# => "Grit is a library to ..."
คุณยังสามารถรับ Blob ได้โดยตรงจาก Repo หากคุณทราบชื่อของมัน
repo.blob("4ebc8aea50e0a67e000ba29a30809d0a7b9b2666")
# => #<Grit::Blob "4ebc8aea50e0a67e000ba29a30809d0a7b9b2666">
มีวิธี API อื่นๆ อีกหลายวิธีที่ไม่ได้ระบุไว้ที่นี่ โปรดอ้างอิงโค้ดเพื่อดูฟังก์ชันการทำงานเพิ่มเติม
ลิขสิทธิ์ (c) 2010 ทอม เพรสตัน-เวอร์เนอร์ ดูใบอนุญาตสำหรับรายละเอียด