Facebook yeni mənbəyə nəzarət sistemi Sapling təqdim etdi

Facebook (Rusiya Federasiyasında qadağandır) şirkətdaxili layihələrin hazırlanmasında istifadə edilən Sapling mənbəyə nəzarət sistemini nəşr etdi. Sistem on milyonlarla fayl, öhdəlik və filialı əhatə edən çox böyük depolar üçün miqyas verə bilən tanış versiya idarəetmə interfeysi təqdim etməyi hədəfləyir. Müştəri kodu Python və Rust dillərində yazılmışdır və GPLv2 lisenziyası altında açıqdır.

Depozitlərlə səmərəli uzaqdan işləmək üçün server hissəsi ayrıca hazırlanmışdır və repozitoriyanın bir hissəsinin yerli dilimi ilə tam repozitoriya kimi işləmək üçün virtual fayl sistemi (developer bütün deponu görür, lakin yalnız daxil olan tələb olunan məlumatları görür). yerli sistemə kopyalanır). Facebook-un infrastrukturunda istifadə edilən bu komponentlərin kodu hələ açıq deyil, lakin şirkət gələcəkdə onu dərc edəcəyinə söz verib. Bununla belə, hazırda Sapling deposunda siz artıq Mononoke serverinin (Rust-də) və VFS EdenFS-in (C++-da) prototiplərini tapa bilərsiniz. Bu komponentlər isteğe bağlıdır və Git depolarının klonlanmasını, Git LFS əsasında serverlərlə qarşılıqlı əlaqədə olmağı və GitHub kimi git hostinq saytları ilə işləməyi dəstəkləyən Sapling müştərisi işləmək üçün kifayətdir.

Sistemin əsas ideyası ondan ibarətdir ki, anbarın saxlanmasını təmin edən xüsusi server hissəsi ilə qarşılıqlı əlaqə zamanı bütün əməliyyatlar tərtibatçının işlədiyi kodda faktiki istifadə olunan faylların sayından asılı olaraq miqyaslanır və onlardan asılı deyildir. bütün deponun ümumi ölçüsü. Məsələn, tərtibatçı çox böyük bir depodan kodun yalnız kiçik bir hissəsindən istifadə edə bilər və yalnız həmin kiçik hissə bütün depoya deyil, onun sisteminə köçürüləcək. Depodan fayllara daxil olduqdan sonra işçi qovluğu dinamik şəkildə doldurulur, bu, bir tərəfdən kodun bir hissəsi ilə işi əhəmiyyətli dərəcədə sürətləndirməyə imkan verir, lakin digər tərəfdən, proqram üçün yeni fayllara giriş zamanı yavaşlamağa səbəb olur. ilk dəfədir və şəbəkəyə daimi giriş tələb edir (öhdəliklərin hazırlanması üçün ayrıca təmin edilmiş və oflayn rejim).

Adaptiv məlumatların yüklənməsi ilə yanaşı, Sapling dəyişikliklər tarixi ilə məlumatın yüklənməsini azaltmağa yönəlmiş optimallaşdırmaları da həyata keçirir (məsələn, Linux nüvəsi olan bir depoda məlumatların 3/4-i dəyişikliklər tarixidir). Dəyişikliklərin tarixçəsi ilə effektiv işləmək üçün onunla əlaqəli məlumatlar serverdən icra qrafikinin ayrı-ayrı hissələrini endirməyə imkan verən seqmentləşdirilmiş təqdimatda saxlanılır. Müştəri serverdən bir neçə öhdəlik arasındakı əlaqə haqqında məlumat tələb edə və qrafikin yalnız lazımi hissəsini endirə bilər.

Layihə son 10 il ərzində inkişaf etdirilir və "birləşmə" əvəzinə "rebase" əməliyyatından istifadə edən bir master filialı ilə çox böyük monolit depolara girişi təşkil edərkən problemləri həll etmək üçün yaradılmışdır. O dövrdə belə depolarla işləmək üçün açıq həllər yox idi və Facebook mühəndisləri layihələri kiçik depolara bölmək əvəzinə, şirkətin ehtiyaclarına cavab verəcək yeni versiyaya nəzarət sistemi yaratmağa qərar verdilər ki, bu da işlərin mürəkkəbliyinə səbəb olacaq. asılılığın idarə edilməsi (bir vaxtlar oxşar problemi həll etmək üçün Microsoft GVFS qatını yaratdı). Əvvəlcə Facebook Mercurial sistemindən və Mercurial-a əlavə olaraq hazırlanmış ilk mərhələdə Fidan layihəsindən istifadə etdi. Zaman keçdikcə sistem öz protokolu, saxlama formatı və alqoritmləri ilə müstəqil layihəyə çevrildi, bu da Git repozitoriyaları ilə qarşılıqlı əlaqə imkanı ilə genişləndirildi.

İş üçün tipik konsepsiyaları, iş axınlarını və Git və Mercurial ilə tanış olan tərtibatçılara tanış olan interfeysi həyata keçirən “sl” əmr xətti yardım proqramı təklif olunur. Sapling-dəki terminologiya və əmrlər Git-dən bir qədər fərqlidir və Mercurial-a daha yaxındır. Məsələn, filiallar əvəzinə "əlfəcinlər" istifadə olunur (adlandırılmış filiallar dəstəklənmir), standart olaraq, klon/çəkmə icra edilərkən, bütün depo yüklənmir, ancaq əsas filial yüklənir, öhdəliklərin ilkin işarələnməsi yoxdur ( səhnələşdirmə sahəsi), “git fetch” əvəzinə “sl” əmri pull, “git pull” əvəzinə “sl pull -rebase”, “git checkout COMMIT” əvəzinə “sl goto COMMIT”, əvəzinə “sl” əmri istifadə olunur. "git reflog" - "sl journal", dəyişikliyi ləğv etmək üçün "git checkout - FILE" əvəzinə "sl revert FILE" göstərilir və "." "HEAD" filialını müəyyən etmək üçün istifadə olunur. Amma ümumilikdə budaqlar və klon/çəkmə/push/commit/rebase əməliyyatlarının ümumi anlayışları qorunub saxlanılır.

Fidan alətlər dəstinin əlavə xüsusiyyətləri arasında anbarınızın vəziyyətini vizual qiymətləndirməyə, ən vacib məlumatları vurğulamağa və əhəmiyyətsiz detalları süzməyə imkan verən "smartlog" dəstəyi fərqlənir. Məsələn, sl yardım proqramını arqumentlər olmadan işə saldığınız zaman ekranda yalnız öz yerli dəyişiklikləriniz göstərilir (digərləri minimuma endirilir), xarici filialların vəziyyəti, dəyişdirilmiş fayllar və öhdəliklərin yeni versiyaları göstərilir. Əlavə olaraq, ağıllı jurnalda tez naviqasiya etməyə, ağac dəyişdirməyə və öhdəlikləri yerinə yetirməyə imkan verən interaktiv veb interfeysi təklif olunur.

Facebook yeni mənbəyə nəzarət sistemi Sapling təqdim etdi

Fidandakı digər diqqətəlayiq təkmilləşdirmə, səhvləri düzəltməyi və həll etməyi və əvvəlki vəziyyətə qayıtmağı asanlaşdırmasıdır. Məsələn, bir çox əməliyyatları geri qaytarmaq üçün “sl undo”, “sl redo”, “sl uncommit” və “sl unamend” əmrləri təklif olunur, “sl hide” və “sl unhide” əmrləri öhdəlikləri müvəqqəti gizlətmək üçün istifadə olunur; və köhnə dövlətlər arasında interaktiv naviqasiya üçün və “sl undo -i command” əmri ilə göstərilən nöqtəyə qayıdın. Sapling, həmçinin mürəkkəb funksionallığı daha kiçik, daha başa düşülən artımlı dəyişikliklər dəstinə (əsas çərçivədən bitmiş funksiyaya) bölmək yolu ilə addım-addım nəzərdən keçirmələri təşkil etməyə imkan verən commit stack konsepsiyasını dəstəkləyir.

Sapling üçün bir sıra əlavələr hazırlanmışdır, o cümlədən dəyişiklikləri nəzərdən keçirmək üçün ReviewStack interfeysi (GPLv2 altında kod), GitHub-da çəkmə sorğularını emal etməyə və dəyişikliklərin yığın görünüşünü istifadə etməyə imkan verir. Bundan əlavə, VSCode və TextMate redaktorları ilə inteqrasiya, həmçinin ISL (Interactive SmartLog) interfeysi və serverinin tətbiqi üçün əlavələr dərc edilmişdir.

Mənbə: opennet.ru

Добавить комментарий