تخطَّ إلى المحتوى
كل المشاريع

Nit: نسخة مصغّرة من Git بلغة Rust

إعادة تنفيذ مصغّرة لـ Git بلغة Rust، تبني نموذج الكائنات الأساسي والفهرس الثنائي ومجموعة من أوامر plumbing و porcelain من الصفر، دون libgit2 ودون الاعتماد على برنامج git.

زيارة المشروع

التقنيات المستخدمة

Rust flate2 SHA-1 zlib Git Internals

نظرة عامة

الدور: مشروع شخصي، كتبتُه بيدي لتعلّم Rust والبنية الداخلية لـ Git · الفترة: يوليو – أغسطس 2026

المستودع: GitHub - m-elhabib-dev/nit

Nit إعادة تنفيذ تعليمية لـ Git بلغة Rust. ينفّذ نموذج الكائنات الأساسي في Git والفهرس ومجموعة من أوامر plumbing و porcelain من الصفر، دون libgit2 ودون برنامج git في الخلفية.

تستخدم المستودعات التي ينشئها Nit صيغة التخزين نفسها التي يستخدمها Git، فيمكن فحصها بـ git العادي (مثل git log و git fsck) والعكس، ما دمتَ تستخدم الأوامر التي يدعمها Nit.

الأوامر المنفّذة:

  • nit init: إنشاء هيكل مستودع .git
  • nit hash-object [-w] <file>: حساب بصمة كائن، وكتابته اختيارياً
  • nit cat-file -p <hash>: عرض كائن بصيغة مقروءة
  • nit write-tree: كتابة شجرة العمل كائنَ شجرة
  • nit ls-tree [--name-only] <tree-hash>: سرد عناصر شجرة
  • nit commit-tree -m <msg> [-p <parent>] <tree-hash>: كتابة كائن commit
  • nit commit -m <msg>: كتابة الشجرة والـ commit وتحديث الفرع الحالي
  • nit add <file>: إضافة ملف (أو . لكل الملفات) إلى الفهرس
  • nit status: عرض الملفات المعدّلة والمحذوفة وغير المتتبَّعة
  • nit clone <path>: استنساخ مستودع محلي

البنية المعمارية

تُخزَّن الكائنات (blobs و trees و commits) في .git/objects بأسماء SHA-1 وضغط zlib عبر flate2. وملف الفهرس الثنائي متوافق مع صيغة Git (الترويسة، والعناصر، ومجموع تحقق SHA-1 في النهاية). وصيغة التخزين مطابقة لمستودعات Git الحقيقية. وفيه تنفيذ جزئي لبروتوكول HTTP الذكي (git-upload-pack وتأطير pkt-line) للاستنساخ عن بُعد.

التحديات

ملفات pack التي تحوي كائنات OFS_DELTA و REF_DELTA غير مدعومة بالكامل: وصلت تجربة الاستنساخ عن بُعد إلى صيغة PACK وتحلّل الكائنات العادية، لكن كائنات delta ما زالت تحتاج إلى تنفيذ. ولم يُنفَّذ .gitignore. والاستنساخ عن بُعد عبر HTTP غير مكتمل. ولا يغطي مسارات Windows ولا أسماء الملفات غير المرمّزة بـ UTF-8.

النتائج

نفّذتُ نموذج كائنات Git الأساسي وفهرساً ثنائياً متوافقاً مع Git من الصفر بلغة Rust، وأنجزتُ أوامر plumbing و porcelain تعمل، منها commit و status و add والاستنساخ المحلي. والمستودعات الناتجة قابلة للفحص بالكامل بأدوات Git الحقيقية.

معرض الصور