Grit tidak lagi dipertahankan. Lihat kasar.
Grit memberi Anda akses baca/tulis berorientasi objek ke repositori Git melalui Ruby. Tujuan utamanya adalah stabilitas dan kinerja. Untuk tujuan ini, beberapa interaksi dengan repositori Git dilakukan dengan menggunakan perintah git
sistem, dan interaksi lainnya dilakukan dengan implementasi ulang fungsi inti Git Ruby murni. Namun, pilihan ini transparan bagi pengguna akhir, dan Anda tidak perlu mengetahui metode mana yang digunakan.
Perangkat lunak ini dikembangkan untuk mendukung GitHub, dan harus dianggap siap produksi. Rangkaian pengujian ekstensif disediakan untuk memverifikasi kebenarannya.
Grit dikelola oleh Tom Preston-Werner, Scott Chacon, Chris Wanstrath, dan PJ Hyett.
Dokumentasi ini akurat pada Grit 2.3.
Instalasi termudah adalah melalui RubyGems:
$ gem install grit
Repo Git Grit tersedia di GitHub, yang dapat diakses di:
http://github.com/mojombo/grit
dan dikloning dengan:
git clone git://github.com/mojombo/grit.git
Anda memerlukan permata ini agar dapat lulus ujian:
Jika Anda ingin meretas Grit, ikuti petunjuk berikut. Untuk mendapatkan semua dependensi, instal permata terlebih dahulu.
rake
Grit memberi Anda akses model objek ke repositori Git Anda. Setelah Anda membuat objek Repo
, Anda dapat melintasinya untuk menemukan komitmen induk, pohon, blob, dll.
Langkah pertama adalah membuat objek Grit::Repo
untuk mewakili repo Anda. Pada dokumentasi ini saya menyertakan modul Grit
untuk mengurangi pengetikan.
require 'grit'
repo = Grit::Repo.new("/Users/tom/dev/grit")
Dalam contoh di atas, direktori /Users/tom/dev/grit
adalah direktori kerja saya dan berisi direktori .git
. Anda juga dapat menginisialisasi Grit dengan repo kosong.
repo = Repo.new("/var/git/grit.git")
Dari objek Repo
, Anda bisa mendapatkan daftar komit sebagai array objek Commit
.
repo.commits
# => [#<Grit::Commit "e80bbd2ce67651aa18e57fb0b43618ad4baf7750">,
#<Grit::Commit "91169e1f5fa4de2eaea3f176461f5dc784796769">,
#<Grit::Commit "038af8c329ef7c1bae4568b98bd5c58510465493">,
#<Grit::Commit "40d3057d09a7a4d61059bca9dca5ae698de58cbe">,
#<Grit::Commit "4ea50f4754937bf19461af58ce3b3d24c77311d9">]
Dipanggil tanpa argumen, Repo#commits
mengembalikan daftar hingga sepuluh komit yang dapat dijangkau oleh cabang master (dimulai dari komit terbaru). Anda dapat meminta komit dimulai dari cabang yang berbeda, komit, tag, dll.
repo.commits('mybranch')
repo.commits('40d3057d09a7a4d61059bca9dca5ae698de58cbe')
repo.commits('v0.1')
Anda dapat menentukan jumlah maksimum komitmen yang akan dikembalikan.
repo.commits('master', 100)
Jika Anda memerlukan paging, Anda dapat menentukan jumlah komitmen yang akan dilewati.
repo.commits('master', 10, 20)
Di atas akan mengembalikan komit 21-30 dari daftar komit.
Objek Commit
berisi informasi tentang komit tersebut.
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"
Anda dapat melintasi leluhur komit dengan merangkai panggilan ke #parents
.
repo.commits.first.parents[0].parents[0].parents[0]
Di atas sesuai dengan master^^^ atau master~3 dalam bahasa Git.
Sebuah pohon mencatat pointer ke isi direktori. Katakanlah Anda menginginkan pohon akar dari komit terbaru di cabang master .
tree = repo.commits.first.tree
# => #<Grit::Tree "3536eb9abac69c3e4db583ad38f3d30f8db4771f">
tree.id
# => "3536eb9abac69c3e4db583ad38f3d30f8db4771f"
Setelah Anda memiliki pohon, Anda bisa mendapatkan isinya.
contents = tree.contents
# => [#<Grit::Blob "4ebc8aea50e0a67e000ba29a30809d0a7b9b2666">,
#<Grit::Blob "81d2c27608b352814cbe979a6acd678d30219678">,
#<Grit::Tree "c3d07b0083f01a6e1ac969a0f32b8d06f20c62e5">,
#<Grit::Tree "4d00fe177a8407dbbc64a24dbfc564762c0922d8">]
Pohon ini berisi dua objek Blob
dan dua objek Tree
. Pohon-pohon adalah subdirektori dan gumpalan adalah file. Pohon yang berada di bawah akar mempunyai atribut tambahan.
contents.last.name
# => "lib"
contents.last.mode
# => "040000"
Ada metode praktis yang memungkinkan Anda mendapatkan sub-objek bernama dari pohon.
tree / "lib"
# => #<Grit::Tree "e74893a3d8a25cbb1367cf241cc741bfd503c4b2">
Anda juga bisa mendapatkan pohon langsung dari repo jika mengetahui namanya.
repo.tree
# => #<Grit::Tree "master">
repo.tree("91169e1f5fa4de2eaea3f176461f5dc784796769")
# => #<Grit::Tree "91169e1f5fa4de2eaea3f176461f5dc784796769">
Blob mewakili file. Pohon sering kali mengandung gumpalan.
blob = tree.contents.first
# => #<Grit::Blob "4ebc8aea50e0a67e000ba29a30809d0a7b9b2666">
Blob memiliki atribut tertentu.
blob.id
# => "4ebc8aea50e0a67e000ba29a30809d0a7b9b2666"
blob.name
# => "README.txt"
blob.mode
# => "100644"
blob.size
# => 7726
Anda bisa mendapatkan data gumpalan sebagai string.
blob.data
# => "Grit is a library to ..."
Anda juga bisa mendapatkan blob langsung dari repo jika Anda mengetahui namanya.
repo.blob("4ebc8aea50e0a67e000ba29a30809d0a7b9b2666")
# => #<Grit::Blob "4ebc8aea50e0a67e000ba29a30809d0a7b9b2666">
Masih banyak lagi metode API yang tersedia yang tidak didokumentasikan di sini. Silakan referensi kode untuk fungsionalitas lebih lanjut.
Hak Cipta (c) 2010 Tom Preston-Werner. Lihat LISENSI untuk detailnya.