Nit: نسخة مصغّرة من Git بلغة Rust
إعادة تنفيذ مصغّرة لـ Git بلغة Rust، تبني نموذج الكائنات الأساسي والفهرس الثنائي ومجموعة من أوامر plumbing و porcelain من الصفر، دون libgit2 ودون الاعتماد على برنامج git.
التقنيات المستخدمة
نظرة عامة
الدور: مشروع شخصي، كتبتُه بيدي لتعلّم 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: إنشاء هيكل مستودع.gitnit 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>: كتابة كائن commitnit 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 الحقيقية.