لم يعد يتم الحفاظ على الحصباء. تحقق من وعرة.
يمنحك Grit وصولاً موجهًا للقراءة/الكتابة إلى مستودعات Git عبر روبي. الأهداف الرئيسية هي الاستقرار والأداء. ولتحقيق هذه الغاية، تتم بعض التفاعلات مع مستودعات Git عن طريق إرسال أمر git
الخاص بالنظام، ويتم إجراء تفاعلات أخرى باستخدام عمليات إعادة تنفيذ Ruby النقية لوظائف Git الأساسية. ومع ذلك، فإن هذا الاختيار واضح للمستخدمين النهائيين، ولا تحتاج إلى معرفة الطريقة المستخدمة.
تم تطوير هذا البرنامج لتشغيل GitHub، ويجب اعتباره جاهزًا للإنتاج. يتم توفير مجموعة اختبار واسعة النطاق للتحقق من صحتها.
تتم صيانة Grit بواسطة Tom Preston-Werner و Scott Chacon و Chris Wanstrath و PJ Hyett.
هذه الوثائق دقيقة اعتبارًا من Grit 2.3.
التثبيت الأسهل يتم عبر RubyGems:
$ gem install grit
يتوفر Grit's Git repo على GitHub، والذي يمكن تصفحه على:
http://github.com/mojombo/grit
واستنساخ مع:
git clone git://github.com/mojombo/grit.git
ستحتاج إلى هذه الأحجار الكريمة لاجتياز الاختبارات:
إذا كنت ترغب في اختراق Grit، فاتبع هذه التعليمات. للحصول على كافة التبعيات، قم بتثبيت الجوهرة أولاً.
rake
يمنحك Grit إمكانية الوصول إلى نموذج الكائن إلى مستودعات Git الخاصة بك. بمجرد إنشاء كائن Repo
، يمكنك اجتيازه للعثور على التزامات الوالدين والأشجار والنقط وما إلى ذلك.
الخطوة الأولى هي إنشاء كائن 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
بدون وسيطات، ويعرض قائمة تصل إلى عشرة التزامات يمكن الوصول إليها بواسطة الفرع الرئيسي (بدءًا من آخر التزام). يمكنك طلب الالتزامات بدءًا من فرع مختلف، أو الالتزام، أو العلامة، وما إلى ذلك.
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
. الأشجار عبارة عن أدلة فرعية والنقاط عبارة عن ملفات. الأشجار الموجودة أسفل الجذر لها سمات إضافية.
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 = 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 ..."
يمكنك أيضًا الحصول على النقطة مباشرةً من الريبو إذا كنت تعرف اسمها.
repo.blob("4ebc8aea50e0a67e000ba29a30809d0a7b9b2666")
# => #<Grit::Blob "4ebc8aea50e0a67e000ba29a30809d0a7b9b2666">
هناك العديد من أساليب واجهة برمجة التطبيقات (API) المتوفرة والتي لم يتم توثيقها هنا. يرجى الرجوع إلى الكود لمزيد من الوظائف.
حقوق الطبع والنشر (ج) 2010 توم بريستون فيرنر. راجع الترخيص للحصول على التفاصيل.