بناء نظام فعال للتحكم في الإصدارات دون تكرار الملفات

إن تخزين نسخ كاملة من الملفات لكل إصدار أو فرع (fork) يؤدي إلى هدر المساحة. فإذا قمت بتغيير سطر واحد في مشروع يتكون من عشرة ملفات، فلا ينبغي عليك حفظ الملفات العشرة كاملة مرة أخرى.

واجهت هذه المشكلة أثناء بناء مشروعي LaTeX Writer. كنت بحاجة إلى طريقة لإدارة التحكم في الإصدارات وتفرع المشاريع (forking) دون تكبد تكاليف تخزين عالية.

بحثت في كيفية عمل GitHub. لا يقوم GitHub بتخزين مستودع (repository) كامل في كل مرة تجري فيها تغييراً، بل يقوم بتخزين المحتوى بشكل منفصل ويستخدم المراجع لربط الملفات والالتزامات (commits).

لقد بنيت نظامي باستخدام ثلاثة مكونات رئيسية:

يعمل النظام من خلال تقنية "تجزئة المحتوى" (content hashing). فعندما تقوم بحفظ ملف، يقوم النظام بإنشاء معرف فريد بناءً على المحتوى. وإذا كان المحتوى موجوداً بالفعل، يعيد النظام استخدام الـ Blob الموجود ولا ينشئ واحداً جديداً.

يجعل هذا النهج عملية التفرع (forking) سهلة وغير مكلفة. فعندما تقوم بتفرع مشروع ما:

لا يتم نسخ أي محتوى فعلي للملف أثناء عملية التفرع؛ فأنت تقوم فقط بتكرار سجلات البيانات الوصفية الصغيرة.

عندما تقوم بتعديل فرع ما، تظل العملية فعالة:

توفر هذه الطريقة عدة فوائد:

ستحصل على وظائف مشابهة لـ GitHub دون أعباء التخزين الثقيلة.

المصدر: https://dev.to/prashant_patil_49/building-github-inspired-version-control-and-forking-without-duplicating-project-files-5aap