فیس بوک سیستم مدیریت کد منبع جدید Sapling را معرفی کرد

فیس بوک (ممنوع در روسیه) سیستم مدیریت کد منبع Sapling را منتشر کرده است که در توسعه پروژه های داخلی این شرکت استفاده می شود. هدف این سیستم ارائه یک رابط نسخه‌سازی آشنا است که می‌تواند به مخازن بسیار بزرگی که ده‌ها میلیون فایل، تعهدات و شاخه‌ها را در بر می‌گیرد، مقیاس کند. کد مشتری در پایتون و Rust نوشته شده است و تحت مجوز GPLv2 باز است.

به طور جداگانه، یک بخش سرور برای کار از راه دور موثر با مخازن و یک سیستم فایل مجازی برای کار با یک برش محلی از بخشی از مخزن مانند یک مخزن کامل (توسعه دهنده کل مخزن را می بیند، اما فقط داده های درخواستی کپی می شود) توسعه داده شد. به سیستم محلی که قابل دسترسی هستند). کد این اجزای مورد استفاده در زیرساخت فیس بوک هنوز باز نشده است، اما این شرکت قول داده است که در آینده آن را منتشر کند. با این حال، نمونه‌های اولیه سرور Mononoke (در Rust) و VFS EdenFS (در C++) را می‌توان در مخزن Sapling یافت. این کامپوننت‌ها اختیاری هستند و کلاینت Sapling برای کار کافی است، که از شبیه‌سازی مخازن Git، تعامل با سرورهای مبتنی بر Git LFS و کار با میزبان‌های git مانند GitHub پشتیبانی می‌کند.

ایده اصلی سیستم این است که هنگام تعامل با یک بخش سرور خاص که ذخیره‌سازی مخزن را فراهم می‌کند، همه عملیات بسته به تعداد فایل‌هایی که واقعاً در کدی که توسعه‌دهنده روی آن کار می‌کند استفاده می‌شوند، مقیاس‌بندی می‌شوند و به آن بستگی ندارند. اندازه کل کل مخزن به عنوان مثال، یک توسعه دهنده ممکن است تنها از بخش کوچکی از کد یک مخزن بسیار بزرگ استفاده کند و تنها این بخش کوچک، به جای کل مخزن، به سیستم او منتقل شود. دایرکتوری کاری به صورت پویا پر می شود، زیرا به فایل های مخزن دسترسی پیدا می کند، که از یک طرف به شما امکان می دهد سرعت کار را با بخشی از کد خود به میزان قابل توجهی افزایش دهید، اما از سوی دیگر، منجر به کاهش سرعت در اولین دسترسی می شود. فایل های جدید و نیاز به دسترسی مداوم به شبکه (به طور جداگانه ارائه شده و حالت آفلاین آماده سازی commit ها).

علاوه بر بارگذاری داده‌های تطبیقی، Sapling همچنین بهینه‌سازی‌هایی را با هدف کاهش بارگذاری اطلاعات با سابقه تغییرات پیاده‌سازی می‌کند (به عنوان مثال، 3/4 از داده‌های موجود در یک مخزن با هسته لینوکس، تاریخچه تغییرات است). برای کار موثر با تاریخچه تغییرات، داده‌های مرتبط با آن در یک نمای بخش‌بندی شده ذخیره می‌شوند که به شما امکان می‌دهد بخش‌های جداگانه نمودار commit را از سرور دانلود کنید. کلاینت می تواند از سرور اطلاعاتی در مورد رابطه چند commit بخواهد و فقط قسمت ضروری نمودار را دانلود کند.

این پروژه در 10 سال گذشته توسعه یافته است و برای حل مشکلات هنگام سازماندهی دسترسی به مخازن یکپارچه بسیار بزرگ با یک شاخه اصلی ایجاد شده است، که در آن تمرین استفاده از عملیات "rebase" به جای "ادغام" انجام شد. در آن زمان، هیچ راه حل باز برای کار با چنین مخازنی وجود نداشت و مهندسان فیس بوک تصمیم گرفتند به جای تقسیم پروژه ها به مخازن کوچک، یک سیستم کنترل نسخه جدید ایجاد کنند که نیازهای شرکت را برآورده کند، که منجر به مدیریت وابستگی پیچیده تر می شد. (در یک زمان، برای حل یک مشکل مشابه، مایکروسافت لایه GVFS را ایجاد کرد). در ابتدا، فیس بوک از سیستم مرکوریال استفاده کرد و پروژه Sapling در ابتدا به عنوان مکمل مرکوریال توسعه یافت. با گذشت زمان، سیستم به یک پروژه مستقل با پروتکل، فرمت ذخیره سازی و الگوریتم های خاص خود تبدیل شد که همچنین با قابلیت تعامل با مخازن Git گسترش یافت.

برای کار، ابزار خط فرمان "sl" پیشنهاد شده است که مفاهیم معمولی، گردش کار و یک رابط آشنا برای توسعه دهندگان آشنا با Git و Mercurial را پیاده سازی می کند. اصطلاحات و دستورات موجود در Sapling کمی با Git متفاوت است و به Mercurial نزدیکتر است. به عنوان مثال، از "نشانک ها" به جای شاخه ها استفاده می شود (شاخه های نامگذاری شده پشتیبانی نمی شوند)، به طور پیش فرض، هنگام انجام کلون / کشش، کل مخزن بارگیری نمی شود، بلکه فقط شعبه اصلی است، هیچ گونه پیش برچسب گذاری از commit وجود ندارد ( ناحیه مرحله بندی)، به جای "git fetch" از دستور "sl" pull استفاده می شود، به جای "git pull" - "sl pull --rebase"، به جای "git checkout COMIT" - "sl goto COMIT"، به جای آن از "git reflog" - "sl journal"، برای برگرداندن تغییر به جای "git checkout - FILE" "sl revert FILE" مشخص شده است و از "." برای شناسایی شاخه "HEAD" استفاده می شود. اما به طور کلی مفاهیم کلی شاخه ها و عملیات کلون/کشیدن/فشار/تعهد/بازسازی حفظ می شود.

در میان ویژگی های اضافی جعبه ابزار Sapling، پشتیبانی از "smart log" (smartlog) متمایز است که به شما امکان می دهد وضعیت مخزن خود را به صورت بصری ارزیابی کنید، مهم ترین اطلاعات را برجسته کنید و جزئیات جزئی را فیلتر کنید. به عنوان مثال، هنگامی که ابزار sl را بدون آرگومان اجرا می کنید، فقط تغییرات محلی شما نمایش داده می شود (خارجی ها جمع می شوند)، وضعیت شاخه های خارجی، فایل های تغییر یافته و نسخه های جدید commit ها نشان داده می شود. علاوه بر این، یک رابط وب تعاملی ارائه شده است که امکان پیمایش سریع در لاگ هوشمند، تغییر درخت و commit ها را فراهم می کند.

فیس بوک سیستم مدیریت کد منبع جدید Sapling را معرفی کرد

یکی دیگر از پیشرفت های قابل توجه در Sapling، ساده سازی فرآیند رفع و تجزیه خطاها و بازگشت به حالت قبلی است. به عنوان مثال، دستورات "sl undo"، "sl redo"، "sl uncommit" و "sl unamend" برای بازگرداندن بسیاری از عملیات، دستورات "sl hide" و "sl unhide" برای مخفی کردن موقت commit ها و ناوبری تعاملی از طریق حالت های قدیمی را نشان می دهد و به نقطه مشخص شده دستور "sl undo -i command" را برمی گردانیم. Sapling همچنین از مفهوم یک پشته commit پشتیبانی می کند، که به شما امکان می دهد یک بررسی گام به گام را با تجزیه عملکردهای پیچیده به مجموعه ای از تغییرات تدریجی کوچکتر و قابل درک تر (از یک چارچوب اولیه تا یک ویژگی تمام شده) سازماندهی کنید.

چندین افزونه برای Sapling آماده شده است، از جمله رابط ReviewStack برای بررسی تغییرات (کد تحت GPLv2)، که به شما امکان می دهد درخواست های کشش را در GitHub پردازش کنید و از نمای پشته ای تغییرات استفاده کنید. علاوه بر این، اضافات برای ادغام با ویرایشگرهای VSCode و TextMate و همچنین اجرای رابط و سرور ISL (Interactive SmartLog) منتشر شده است.

منبع: opennet.ru

اضافه کردن نظر