Facebookek Sapling iturburu kodea kudeatzeko sistema berria aurkeztu zuen

Facebookek (Errusian debekatua) konpainiaren barne proiektuak garatzeko erabiltzen den Sapling iturburu kodea kudeatzeko sistema argitaratu du. Sistemak bertsio berritzeko interfaze ezagun bat eskaintzea du helburu, hamar milioi fitxategi, konpromezu eta adar hartzen dituzten biltegi oso handietara eskala daitekeena. Bezeroaren kodea Python eta Rust-en idatzita dago eta GPLv2 lizentziapean dago irekita.

Bereiz, zerbitzari-zati bat garatu zen biltegiekin urruneko lan eraginkorra izateko eta fitxategi-sistema birtual bat biltegiaren zati baten tokiko zati batekin biltegi oso batekin bezala lan egiteko (garatzaileak biltegi osoa ikusten du, baina eskatutako datuak soilik kopiatzen dira). tokiko sistemara, zeinetara sartzen diren). Facebook azpiegituran erabiltzen diren osagai horien kodea oraindik ez dago irekita, baina enpresak etorkizunean argitaratuko zuela hitzeman zuen. Hala ere, Sapling biltegian Mononoke zerbitzariaren prototipoak (Rust-en) eta VFS EdenFS (C++-n) aurki daitezke dagoeneko. Osagai hauek aukerakoak dira eta Sapling bezeroa nahikoa da funtzionatzeko, Git biltegiak klonatzea onartzen duena, Git LFSn oinarritutako zerbitzariekin elkarreragina eta GitHub bezalako git ostalariekin lan egitea.

Sistemaren ideia nagusia da biltegia biltegiratzea eskaintzen duen zerbitzariaren zati berezi batekin elkarreraginean, eragiketa guztiak garatzaileak lantzen ari den kodean benetan erabilitako fitxategi kopuruaren arabera eskalatzen direla eta ez direla mendekoak. biltegi osoaren guztizko tamaina. Adibidez, garatzaile batek oso biltegi handi bateko kode-zati bat soilik erabil dezake, eta zati txiki hori bakarrik, biltegi osoa baino, bere sistemara transferituko da. Lan-direktorioa dinamikoki betetzen da, biltegiko fitxategiak sartzen diren heinean, eta horrek, alde batetik, zure kodearen zatiarekin lana nabarmen bizkortzeko aukera ematen du, baina, bestetik, moteltzea dakar lehen aldiz sartzen zarenean. fitxategi berriak eta sarerako etengabeko sarbidea behar du (bereiz emandako eta lineaz kanpoko konpromisoak prestatzeko modua).

Datuen karga egokitzaileaz gain, Sapling-ek aldaketak historia duen informazioaren karga murrizteko optimizazioak ere ezartzen ditu (adibidez, Linux nukleoa duen biltegi batean datuen 3/4 aldaketen historia da). Aldaketen historiarekin modu eraginkorrean lan egiteko, harekin lotutako datuak segmentatutako ikuspegi batean gordetzen dira, eta horrek zerbitzaritik konprometitutako grafikoaren zati bereiziak deskargatzeko aukera ematen du. Bezeroak zerbitzariari hainbat konpromisoren erlazioari buruzko informazioa eska diezaioke eta grafikoaren beharrezko zatia bakarrik deskargatu.

Proiektua azken 10 urteetan garatu da eta adar nagusi bakarra duten biltegi monolitiko oso handietarako sarbidea antolatzean arazoak konpontzeko sortu zen, non "rebase" eragiketa erabiltzearen praktika "bate" beharrean praktikatzen zen. Garai hartan, ez zegoen horrelako biltegiekin lan egiteko irtenbide irekirik, eta Facebookeko ingeniariek enpresaren beharrizanei erantzuteko bertsioak kontrolatzeko sistema berri bat sortzea erabaki zuten, proiektuak biltegi txikietan banatu beharrean, eta horrek mendekotasunen kudeaketa konplikatuagoa ekarriko zuen. (garai batean, antzeko arazo bat konpontzeko, Microsoft-ek GVFS geruza sortu zuen). Hasieran, Facebookek Mercurial sistema erabiltzen zuen eta Sapling proiektua Mercurial-en gehigarri gisa garatu zen hasieran. Denborarekin, sistema proiektu independente batean bihurtu zen, bere protokolo, biltegiratze formatu eta algoritmo propioekin, eta Git biltegiekin elkarreragiteko gaitasunarekin ere zabaldu zen.

Lanerako, "sl" komando-lerroko utilitatea proposatzen da, kontzeptu tipikoak, lan-fluxuak eta Git eta Mercurial ezagutzen dituzten garatzaileek ezagutzen duten interfazea ezartzen dituena. Sapling-en terminologia eta komandoak Git-en apur bat desberdinak dira eta Mercurialetik hurbilago daude. Esate baterako, "laster-markak" erabiltzen dira adarren ordez (izeneko adarrak ez dira onartzen), lehenespenez, klona / tiraketa egitean, ez da biltegi osoa kargatzen, adar nagusia baizik, ez dago konpromisoen aurre-etiketarik ( etapa), "git fetch" ordez "sl" komandoa tira erabiltzen da, "git pull" - "sl pull --rebase" ordez, "git checkout COMMIT" - "sl goto COMMIT" ordez. "git reflog" - "sl journal", "git checkout - FILE"ren ordez aldaketa leheneratzeko "sl revert FILE" zehazten da, eta "." "HEAD" adarra identifikatzeko erabiltzen da. Baina, oro har, adar eta klona/tira/bultza/konpromisatu/berritu eragiketen kontzeptu orokorrak gordetzen dira.

Sapling tresna-tresnaren ezaugarri gehigarrien artean, "smart log" (smartlog) euskarria nabarmentzen da, zure biltegiaren egoera bisualki ebaluatzeko, informazio garrantzitsuena nabarmentzeko eta xehetasun txikiak iragazteko aukera ematen duena. Adibidez, sl utilitatea argumenturik gabe exekutatzen duzunean, zure tokiko aldaketak bakarrik bistaratzen dira (atzerrikoak tolestuta daude), kanpoko adarren egoera, aldatutako fitxategiak eta konpromisoen bertsio berriak erakusten dira. Gainera, web-interfaze interaktibo bat eskaintzen da, erregistro adimendunean azkar nabigatzea, zuhaitza aldatzea eta konpromisoak egitea ahalbidetzen duena.

Facebookek Sapling iturburu kodea kudeatzeko sistema berria aurkeztu zuen

Sapling-en beste hobekuntza nabarmen bat akatsak konpontzeko eta analizatzeko prozesua sinplifikatzea eta aurreko egoera batera itzultzea da. Adibidez, "sl undo", "sl redo", "sl uncommit" eta "sl unamend" komandoak eskaintzen dira eragiketa asko atzera egiteko, "sl hide" eta "sl unhide" komandoak konpromezuak aldi baterako ezkutatzeko eta nabigazio interaktiboa. egoera zaharrak eta zehaztutako puntura itzuli "sl desegin -i komandoa" komandoa. Sapling-ek konpromiso-pila baten kontzeptua ere onartzen du, eta horrek urratsez urrats berrikuspena antolatzeko aukera ematen du, funtzionaltasun konplexuak aldaketa gehigarri txikiago eta ulergarrien multzo batean banatuz (oinarrizko marko batetik eginbide amaitu batera).

Sapling-erako hainbat gehigarri prestatu dira, aldaketak berrikusteko ReviewStack interfazea barne (GPLv2ren kodea), GitHub-en pull-eskaerak prozesatzeko eta aldaketen pila-ikuspegia erabiltzeko aukera ematen duena. Horrez gain, VSCode eta TextMate editoreekin integratzeko gehigarriak argitaratu dira, baita ISL (Interactive SmartLog) interfazea eta zerbitzaria ezartzeko ere.

Iturria: opennet.ru

Gehitu iruzkin berria