Gipadayag sa Facebook ang bag-ong sistema sa pagkontrol sa gigikanan nga Sapling

Ang Facebook (gidili sa Russian Federation) nagpatik sa Sapling source control system, nga gigamit sa pagpalambo sa internal nga mga proyekto sa kompanya. Ang sistema nagtumong sa paghatag usa ka pamilyar nga interface sa pagkontrol sa bersyon nga mahimo’g sukdon alang sa dako kaayo nga mga repositoryo nga naglangkob sa napulo ka milyon nga mga file, commit ug mga sanga. Ang code sa kliyente gisulat sa Python ug Rust, ug bukas ubos sa lisensya sa GPLv2.

Ang usa ka bahin sa server gihimo nga gilain alang sa episyente nga hilit nga trabaho nga adunay mga repositoryo ug usa ka virtual file system alang sa pagtrabaho sa usa ka lokal nga hiwa sa usa ka bahin sa repository ingon usa ka kompleto nga repository (nakita sa developer ang tibuuk nga tipiganan, apan ang gikinahanglan nga datos lamang ang ma-access. gikopya sa lokal nga sistema). Ang code alang niini nga mga sangkap nga gigamit sa imprastraktura sa Facebook dili pa bukas, apan ang kompanya misaad nga imantala kini sa umaabot. Apan, sa pagkakaron sa Sapling repository makit-an na nimo ang mga prototype sa Mononoke server (sa Rust) ug VFS EdenFS (sa C++). Opsyonal kini nga mga sangkap ug ang kliyente sa Sapling igo na nga magtrabaho, nga nagsuporta sa pag-clone sa mga repositoryo sa Git, nakig-uban sa mga server nga gibase sa Git LFS ug nagtrabaho kauban ang git hosting nga mga site sama sa GitHub.

Ang panguna nga ideya sa sistema mao nga kung makig-uban sa usa ka espesyal nga bahin sa server nga naghatag pagtipig sa repository, ang tanan nga mga operasyon gi-scale depende sa gidaghanon sa mga file nga aktuwal nga gigamit sa code nga gitrabaho sa developer, ug wala magdepende sa ang kinatibuk-ang gidak-on sa tibuok repositoryo. Pananglitan, ang usa ka developer mahimong mogamit lang ug gamay nga bahin sa code gikan sa dako kaayong repository ug kanang gamay lang nga bahin ang ibalhin sa iyang sistema, dili ang tibuok repository. Ang direktoryo sa pagtrabaho napuno sa dinamikong paagi samtang ang mga file gikan sa repository gi-access, nga, sa usa ka bahin, nagtugot kanimo sa pagpadali sa trabaho sa imong bahin sa code, apan sa laing bahin mosangpot sa usa ka paghinay sa pag-access sa bag-ong mga file alang sa una nga higayon ug nanginahanglan kanunay nga pag-access sa network (lain nga gihatag ug offline mode alang sa pag-andam sa mga pasalig).

Dugang pa sa adaptive data loading, si Sapling nagpatuman usab ug optimizations nga gitumong sa pagpakunhod sa loading sa impormasyon uban sa kasaysayan sa mga kausaban (pananglitan, 3/4 sa mga data sa usa ka repository uban sa Linux kernel mao ang kasaysayan sa mga kausaban). Aron epektibo nga magtrabaho sa kasaysayan sa mga pagbag-o, ang datos nga may kalabutan niini gitipigan sa usa ka gibahin nga representasyon nga nagtugot kanimo sa pag-download sa indibidwal nga mga bahin sa commit graph gikan sa server. Ang kliyente makapangayo og impormasyon gikan sa server mahitungod sa relasyon tali sa pipila ka mga commit ug i-download lamang ang gikinahanglan nga bahin sa graph.

Ang proyekto nag-uswag sa milabay nga 10 ka tuig ug gimugna aron masulbad ang mga problema sa pag-organisar sa pag-access sa dako kaayo nga monolithic repository nga adunay usa ka master branch, nga migamit sa "rebase" nga operasyon imbes nga "merge". Nianang panahona, wala'y bukas nga mga solusyon alang sa pagtrabaho sa ingon nga mga repository, ug ang mga inhenyero sa Facebook nakahukom sa paghimo sa usa ka bag-ong bersyon sa pagkontrol sa sistema nga makatubag sa mga panginahanglan sa kompanya, imbis nga magbahin sa mga proyekto ngadto sa gagmay nga mga repositoryo, nga mosangpot sa pagkakomplikado sa pagdumala sa dependency (sa usa ka higayon, aron masulbad ang parehas nga problema, gihimo sa Microsoft ang GVFS layer). Sa sinugdan, gigamit sa Facebook ang Mercurial system ug ang Sapling project sa unang yugto naugmad isip dugang sa Mercurial. Sa paglabay sa panahon, ang sistema nahimong usa ka independente nga proyekto nga adunay kaugalingon nga protocol, format sa pagtipig ug mga algorithm, nga gipalapdan usab nga adunay kaarang nga makig-uban sa mga repositoryo sa Git.

Alang sa trabaho, gitanyag ang usa ka command line utility nga "sl", nga nagpatuman sa mga tipikal nga konsepto, mga workflow ug usa ka interface nga pamilyar sa mga developer nga pamilyar sa Git ug Mercurial. Ang terminolohiya ug mga sugo sa Sapling gamay nga lahi sa Git ug mas duol sa Mercurial. Pananglitan, imbes nga mga sanga, gigamit ang "mga bookmark" (gitawag nga mga sanga dili suportado), sa default, kung gipatuman ang clone / pagbira, dili ang tibuuk nga repository ang na-load, apan ang panguna nga sanga, wala’y pasiuna nga pagmarka sa mga nahimo ( staging area), imbes nga "git fetch" ang "sl" command gigamit nga pull", imbes nga "git pull" - "sl pull -rebase", imbes nga "git checkout COMMIT" - "sl goto COMMIT", imbes nga "git reflog" - "sl journal", aron kanselahon ang usa ka pagbag-o imbes nga "git checkout - FILE" "sl revert FILE" gipiho, ug "." gigamit sa pag-ila sa "HEAD" nga sanga. Apan sa kinatibuk-an, ang kinatibuk-ang konsepto sa mga sanga ug clone/pull/push/commit/rebase nga mga operasyon gipreserbar.

Lakip sa mga dugang nga bahin sa Sapling toolkit, ang suporta alang sa "smartlog" nagbarug, nga nagtugot kanimo sa pagtan-aw sa kahimtang sa imong repository, ipasiugda ang labing hinungdanon nga kasayuran ug isala ang dili hinungdanon nga mga detalye. Pananglitan, kung imong gipadagan ang sl utility nga wala’y mga argumento, ang imong kaugalingon nga lokal nga mga pagbag-o lamang ang gipakita sa screen (ang uban giminusan), ang estado sa mga eksternal nga sanga, nabag-o nga mga file ug bag-ong bersyon sa mga commit gipakita. Dugang pa, gitanyag ang usa ka interactive nga web interface, nga nagpaposible sa dali nga pag-navigate sa smart log, pagbag-o sa kahoy ug pag-commit.

Gipadayag sa Facebook ang bag-ong sistema sa pagkontrol sa gigikanan nga Sapling

Laing talagsaong pag-uswag sa Sapling mao nga kini makapasayon ​​sa pag-ayo ug pagsulbad sa mga sayop ug pagbalik sa kanhing kahimtang. Pananglitan, ang mga sugo nga "sl undo", "sl redo", "sl uncommit" ug "sl unamend" gitanyag aron ibalik ang daghang mga operasyon; ang mga sugo nga "sl hide" ug "sl unhide" gigamit sa temporaryo nga pagtago sa mga commit; ug alang sa interactive nabigasyon pinaagi sa daan nga mga estado ug mobalik sa piho nga punto uban sa sugo "sl undo -i sugo". Gisuportahan usab sa Sapling ang konsepto sa usa ka commit stack, nga nagtugot kanimo sa pag-organisar sa sunod-sunod nga mga pagsusi pinaagi sa pagbungkag sa komplikado nga pagpaandar ngadto sa usa ka hugpong sa mas gagmay, mas masabtan nga mga pagbag-o sa pagdugang (gikan sa usa ka sukaranan nga balangkas hangtod sa usa ka nahuman nga function).

Daghang mga pagdugang ang giandam alang sa Sapling, lakip ang ReviewStack interface alang sa pagrepaso sa mga pagbag-o (code ubos sa GPLv2), nga nagtugot kanimo sa pagproseso sa mga hangyo sa pagbitad sa GitHub ug paggamit sa usa ka stack nga pagtan-aw sa mga pagbag-o. Dugang pa, ang mga pagdugang gipatik alang sa paghiusa sa mga editor sa VSCode ug TextMate, ingon man ang pagpatuman sa interface ug server sa ISL (Interactive SmartLog).

Source: opennet.ru

Idugang sa usa ka comment