ساخت کنترل نسخه کارآمد بدون کپی کردن فایل‌ها

ذخیره کپی‌های کامل از فایل‌ها برای هر نسخه یا فورک (fork)، باعث هدر رفتن فضا می‌شود. اگر در پروژه‌ای با ده فایل، تنها یک خط را تغییر دهید، نباید تمام آن ده فایل را دوباره ذخیره کنید.

من هنگام ساخت پروژه LaTeX Writer خود با این مشکل مواجه شدم. به روشی نیاز داشتم تا کنترل نسخه و فورک کردن پروژه را بدون هزینه‌های بالای ذخیره‌سازی مدیریت کنم.

من بررسی کردم که GitHub چگونه کار می‌کند. GitHub با هر بار تغییر، یک مخزن (repository) کامل ذخیره نمی‌کند. بلکه محتوا را به‌صورت جداگانه ذخیره کرده و از ارجاع‌ها (references) برای پیوند دادن فایل‌ها و کامیت‌ها (commits) استفاده می‌کند.

من سیستم خود را با استفاده از سه جزء اصلی ساختم:

این سیستم از طریق هش کردن محتوا (content hashing) کار می‌کند. وقتی فایلی را ذخیره می‌کنید، سیستم یک شناسه منحصربه‌فرد بر اساس محتوا تولید می‌کند. اگر آن محتوا از قبل وجود داشته باشد، سیستم از Blob موجود دوباره استفاده می‌کند و یک Blob جدید نمی‌سازد.

این رویکرد، فورک کردن را آسان و ارزان می‌کند. وقتی پروژه‌ای را فورک می‌کنید:

در طول یک فورک، هیچ محتوای واقعی از فایل کپی نمی‌شود. شما فقط رکوردهای کوچک متادیتا را تکثیر می‌کنید.

وقتی یک فورک را ویرایش می‌کنید، فرآیند همچنان کارآمد باقی می‌ماند:

این روش چندین مزیت دارد:

شما بدون هزینه‌های سنگین ذخیره‌سازی، به قابلیت‌هایی مشابه GitHub دست می‌یابید.

منبع: https://dev.to/prashant_patil_49/building-github-inspired-version-control-and-forking-without-duplicating-project-files-5aap