فائلوں کو ڈپلیکیٹ کیے بغیر موثر ورژن کنٹرول بنانا
ہر ورژن یا فورک (fork) کے لیے فائلوں کی مکمل کاپیاں محفوظ کرنا جگہ ضائع کرتا ہے۔ اگر آپ دس فائلوں والے پروجیکٹ میں ایک لائن تبدیل کرتے ہیں، تو آپ کو تمام دس فائلوں کو دوبارہ محفوظ کرنے کی ضرورت نہیں ہونی چاہیے۔
مجھے اپنے LaTeX Writer پروجیکٹ کی تعمیر کے دوران اس مسئلے کا سامنا کرنا پڑا۔ مجھے زیادہ اسٹوریج لاگت کے بغیر ورژن کنٹرول اور پروجیکٹ فورکنگ کو سنبھالنے کا ایک طریقہ چاہیے تھا۔
میں نے دیکھا کہ GitHub کیسے کام کرتا ہے۔ GitHub ہر بار تبدیلی کرنے پر مکمل ریپوزٹری (repository) محفوظ نہیں کرتا۔ یہ مواد کو الگ سے محفوظ کرتا ہے اور فائلوں اور کمٹس (commits) کو جوڑنے کے لیے ریفرنسز کا استعمال کرتا ہے۔
میں نے اپنا سسٹم تین اہم اجزاء کا استعمال کرتے ہوئے بنایا:
- میٹا ڈیٹا (Metadata): یہ پروجیکٹس، مالکان اور فولڈرز کے لیے آئی ڈیز (IDs) محفوظ کرتا ہے۔
- فائل ریکارڈز (File Records): یہ فائلوں کے نام اور مواد کے لنکس محفوظ کرتے ہیں۔
- بلوبز (Blobs): یہ وہ جگہ ہے جہاں اصل مواد موجود ہوتا ہے۔
یہ سسٹم کنٹینٹ ہیشنگ (content hashing) کے ذریعے کام کرتا ہے۔ جب آپ ایک فائل محفوظ کرتے ہیں، تو سسٹم مواد کی بنیاد پر ایک منفرد آئی ڈی تیار کرتا ہے۔ اگر وہ مواد پہلے سے موجود ہے، تو سسٹم موجودہ بلوب (Blob) کو ہی دوبارہ استعمال کرتا ہے۔ یہ نیا بلوب نہیں بناتا۔
یہ طریقہ فورکنگ کو آسان اور سستا بناتا ہے۔ جب آپ کسی پروجیکٹ کو فورک کرتے ہیں:
- سسٹم ایک نئی پروجیکٹ آئی ڈی (Project ID) بناتا ہے۔
- یہ فائلوں اور فولڈرز کے لیے نیا میٹا ڈیٹا تیار کرتا ہے۔
- یہ نئے میٹا ڈیٹا کو موجودہ بلوبز کی طرف اشارہ کرتا ہے۔
فورک کے دوران فائل کا کوئی اصل مواد کاپی نہیں کیا جاتا۔ آپ صرف چھوٹے میٹا ڈیٹا ریکارڈز کو ڈپلیکیٹ کرتے ہیں۔
جب آپ کسی فورک میں ترمیم کرتے ہیں، تو عمل موثر رہتا ہے:
- آپ مواد تبدیل کرتے ہیں۔
- سسٹم نئے مواد کو ہیش (hash) کرتا ہے۔
- یہ نیا بلوب صرف اسی صورت میں بناتا ہے اگر وہ بالکل وہی مواد پہلے سے موجود نہ ہو۔
- آپ کے فورک کا میٹا ڈیٹا نئے بلوب کی طرف اشارہ کرتا ہے۔
- اصل پروجیکٹ اب بھی پرانے بلوب کی طرف اشارہ کرتا ہے۔
یہ طریقہ کئی فوائد فراہم کرتا ہے:
- کنٹینٹ ڈی ڈپلیکیشن (Content deduplication) سے بہت زیادہ جگہ بچتی ہے۔
- فورکنگ فوری طور پر ہو جاتی ہے۔
- ورژن مینجمنٹ منظم رہتی ہے۔
- ڈیٹا بیس کی نشوونما سست رہتی ہے۔
آپ کو بھاری اسٹوریج کے بوجھ کے بغیر GitHub جیسی فعالیت حاصل ہوتی ہے۔