Facebook కొత్త సోర్స్ కోడ్ మేనేజ్‌మెంట్ సిస్టమ్‌ను పరిచయం చేసింది

Facebook (రష్యన్ ఫెడరేషన్‌లో నిషేధించబడింది) అంతర్గత కంపెనీ ప్రాజెక్ట్‌ల అభివృద్ధిలో ఉపయోగించే సాప్లింగ్ సోర్స్ కంట్రోల్ సిస్టమ్‌ను ప్రచురించింది. పది మిలియన్ల ఫైళ్లు, కమిట్‌లు మరియు బ్రాంచ్‌లు విస్తరించి ఉన్న చాలా పెద్ద రిపోజిటరీల కోసం స్కేల్ చేయగల సుపరిచితమైన వెర్షన్ కంట్రోల్ ఇంటర్‌ఫేస్‌ను అందించడం సిస్టమ్ లక్ష్యం. క్లయింట్ కోడ్ పైథాన్ మరియు రస్ట్‌లో వ్రాయబడింది మరియు GPLv2 లైసెన్స్ క్రింద తెరవబడుతుంది.

రిపోజిటరీలతో సమర్థవంతమైన రిమోట్ పని కోసం సర్వర్ భాగం విడిగా అభివృద్ధి చేయబడింది మరియు రిపోజిటరీలోని కొంత భాగం యొక్క స్థానిక స్లైస్‌తో పూర్తి రిపోజిటరీగా పని చేయడానికి వర్చువల్ ఫైల్ సిస్టమ్ (డెవలపర్ మొత్తం రిపోజిటరీని చూస్తాడు, కానీ అవసరమైన డేటా మాత్రమే యాక్సెస్ చేయబడుతుంది. స్థానిక వ్యవస్థకు కాపీ చేయబడింది). Facebook ఇన్‌ఫ్రాస్ట్రక్చర్‌లో ఉపయోగించిన ఈ కాంపోనెంట్‌ల కోడ్ ఇంకా తెరవబడలేదు, అయితే భవిష్యత్తులో దీనిని ప్రచురిస్తానని కంపెనీ హామీ ఇచ్చింది. అయితే, ప్రస్తుతం సాప్లింగ్ రిపోజిటరీలో మీరు ఇప్పటికే మోనోనోక్ సర్వర్ (రస్ట్‌లో) మరియు VFS EdenFS (C++లో) ప్రోటోటైప్‌లను కనుగొనవచ్చు. ఈ భాగాలు ఐచ్ఛికం మరియు Sapling క్లయింట్ పని చేయడానికి సరిపోతుంది, ఇది Git రిపోజిటరీలను క్లోనింగ్ చేయడానికి మద్దతు ఇస్తుంది, Git LFS ఆధారంగా సర్వర్‌లతో పరస్పర చర్య చేస్తుంది మరియు GitHub వంటి git హోస్టింగ్ సైట్‌లతో పని చేస్తుంది.

సిస్టమ్ యొక్క ప్రధాన ఆలోచన ఏమిటంటే, రిపోజిటరీ యొక్క నిల్వను అందించే ప్రత్యేక సర్వర్ భాగంతో పరస్పర చర్య చేస్తున్నప్పుడు, డెవలపర్ పని చేస్తున్న కోడ్‌లో వాస్తవానికి ఉపయోగించిన ఫైల్‌ల సంఖ్యను బట్టి అన్ని కార్యకలాపాలు స్కేల్ చేయబడతాయి మరియు వాటిపై ఆధారపడవు. మొత్తం రిపోజిటరీ మొత్తం పరిమాణం. ఉదాహరణకు, డెవలపర్ చాలా పెద్ద రిపోజిటరీ నుండి కోడ్ యొక్క చిన్న భాగాన్ని మాత్రమే ఉపయోగించవచ్చు మరియు ఆ చిన్న భాగం మాత్రమే అతని సిస్టమ్‌కు తరలించబడుతుంది, మొత్తం రిపోజిటరీకి కాదు. రిపోజిటరీ నుండి ఫైల్‌లు యాక్సెస్ చేయబడినందున వర్కింగ్ డైరెక్టరీ డైనమిక్‌గా నింపబడుతుంది, ఇది ఒకవైపు, మీ కోడ్‌లో కొంత భాగంతో పనిని గణనీయంగా వేగవంతం చేయడానికి మిమ్మల్ని అనుమతిస్తుంది, కానీ మరోవైపు కొత్త ఫైల్‌లను యాక్సెస్ చేసేటప్పుడు మందగమనానికి దారితీస్తుంది. మొదటిసారి మరియు నెట్‌వర్క్‌కు స్థిరమైన యాక్సెస్ అవసరం (విడిగా అందించబడింది మరియు కమిట్‌లను సిద్ధం చేయడానికి ఆఫ్‌లైన్ మోడ్).

అడాప్టివ్ డేటా లోడింగ్‌తో పాటు, మార్పుల చరిత్రతో సమాచారాన్ని లోడ్ చేయడాన్ని తగ్గించే లక్ష్యంతో కూడిన ఆప్టిమైజేషన్‌లను కూడా Sapling అమలు చేస్తుంది (ఉదాహరణకు, Linux కెర్నల్‌తో ఉన్న రిపోజిటరీలో 3/4 డేటా మార్పుల చరిత్ర). మార్పుల చరిత్రతో సమర్థవంతంగా పని చేయడానికి, దానితో అనుబంధించబడిన డేటా సెగ్మెంటెడ్ ప్రాతినిధ్యంలో నిల్వ చేయబడుతుంది, ఇది సర్వర్ నుండి కమిట్ గ్రాఫ్ యొక్క వ్యక్తిగత భాగాలను డౌన్‌లోడ్ చేయడానికి మిమ్మల్ని అనుమతిస్తుంది. క్లయింట్ అనేక కమిట్‌ల మధ్య సంబంధం గురించి సర్వర్ నుండి సమాచారాన్ని అభ్యర్థించవచ్చు మరియు గ్రాఫ్‌లోని అవసరమైన భాగాన్ని మాత్రమే డౌన్‌లోడ్ చేసుకోవచ్చు.

ఈ ప్రాజెక్ట్ గత 10 సంవత్సరాలుగా అభివృద్ధి చెందుతోంది మరియు ఒక మాస్టర్ బ్రాంచ్‌తో చాలా పెద్ద మోనోలిథిక్ రిపోజిటరీలకు యాక్సెస్‌ను నిర్వహించేటప్పుడు సమస్యలను పరిష్కరించడానికి సృష్టించబడింది, ఇది "విలీనం"కి బదులుగా "రీబేస్" ఆపరేషన్‌ను ఉపయోగించింది. ఆ సమయంలో, అటువంటి రిపోజిటరీలతో పనిచేయడానికి బహిరంగ పరిష్కారాలు లేవు మరియు Facebook ఇంజనీర్లు ప్రాజెక్ట్‌లను చిన్న రిపోజిటరీలుగా విభజించే బదులు కంపెనీ అవసరాలను తీర్చగల కొత్త వెర్షన్ నియంత్రణ వ్యవస్థను రూపొందించాలని నిర్ణయించుకున్నారు, ఇది సంక్లిష్టతకు దారి తీస్తుంది. డిపెండెన్సీ మేనేజ్‌మెంట్ (ఒకప్పుడు, ఇలాంటి సమస్యను పరిష్కరించడానికి, మైక్రోసాఫ్ట్ GVFS లేయర్‌ని సృష్టించింది). ప్రారంభంలో, ఫేస్‌బుక్ మెర్క్యురియల్ సిస్టమ్‌ను ఉపయోగించింది మరియు మెర్క్యురియల్‌కు అదనంగా అభివృద్ధి చేయబడిన మొదటి దశలో సాప్లింగ్ ప్రాజెక్ట్‌ను ఉపయోగించింది. కాలక్రమేణా, సిస్టమ్ దాని స్వంత ప్రోటోకాల్, స్టోరేజ్ ఫార్మాట్ మరియు అల్గారిథమ్‌లతో స్వతంత్ర ప్రాజెక్ట్‌గా రూపాంతరం చెందింది, ఇది Git రిపోజిటరీలతో పరస్పర చర్య చేసే సామర్థ్యంతో కూడా విస్తరించబడింది.

పని కోసం, కమాండ్ లైన్ యుటిలిటీ “sl” అందించబడుతుంది, ఇది సాధారణ భావనలు, వర్క్‌ఫ్లోలు మరియు Git మరియు మెర్క్యురియల్‌తో తెలిసిన డెవలపర్‌లకు తెలిసిన ఇంటర్‌ఫేస్‌ను అమలు చేస్తుంది. సాప్లింగ్‌లోని పరిభాష మరియు ఆదేశాలు Git నుండి కొద్దిగా భిన్నంగా ఉంటాయి మరియు మెర్క్యురియల్‌కి దగ్గరగా ఉంటాయి. ఉదాహరణకు, బ్రాంచ్‌లకు బదులుగా, “బుక్‌మార్క్‌లు” ఉపయోగించబడతాయి (పేరున్న శాఖలకు మద్దతు లేదు), డిఫాల్ట్‌గా, క్లోన్/పుల్‌ని అమలు చేస్తున్నప్పుడు, మొత్తం రిపోజిటరీ లోడ్ చేయబడదు, కానీ ప్రధాన శాఖ మాత్రమే, కమిట్‌ల ప్రాథమిక మార్కింగ్ లేదు ( స్టేజింగ్ ఏరియా), “git fetch”కి బదులుగా “sl” కమాండ్ పుల్", బదులుగా "git pull" - "sl pull -rebase", బదులుగా "git Checkout COMMIT" - "sl goto COMMIT" ఉపయోగించబడుతుంది. "git reflog" - "sl journal", "git Checkout - FILE" బదులుగా మార్పును రద్దు చేయడానికి "sl revert FILE" పేర్కొనబడింది మరియు "HEAD" శాఖను గుర్తించడానికి "." ఉపయోగించబడుతుంది. కానీ సాధారణంగా, బ్రాంచ్‌ల సాధారణ భావనలు మరియు క్లోన్/పుల్/పుష్/కమిట్/రీబేస్ ఆపరేషన్‌లు భద్రపరచబడతాయి.

సాప్లింగ్ టూల్‌కిట్ యొక్క అదనపు లక్షణాలలో, “స్మార్ట్‌లాగ్” కోసం మద్దతు నిలుస్తుంది, ఇది మీ రిపోజిటరీ స్థితిని దృశ్యమానంగా అంచనా వేయడానికి, అత్యంత ముఖ్యమైన సమాచారాన్ని హైలైట్ చేయడానికి మరియు అప్రధానమైన వివరాలను ఫిల్టర్ చేయడానికి మిమ్మల్ని అనుమతిస్తుంది. ఉదాహరణకు, మీరు వాదనలు లేకుండా sl యుటిలిటీని అమలు చేసినప్పుడు, మీ స్వంత స్థానిక మార్పులు మాత్రమే స్క్రీన్‌పై ప్రదర్శించబడతాయి (ఇతరులు కనిష్టీకరించబడతాయి), బాహ్య శాఖల స్థితి, మార్చబడిన ఫైల్‌లు మరియు కమిట్‌ల యొక్క కొత్త సంస్కరణలు చూపబడతాయి. అదనంగా, ఇంటరాక్టివ్ వెబ్ ఇంటర్‌ఫేస్ అందించబడుతుంది, ఇది స్మార్ట్ లాగ్ ద్వారా త్వరగా నావిగేట్ చేయడం, ట్రీని మార్చడం మరియు కమిట్‌లను చేయడం సాధ్యపడుతుంది.

Facebook కొత్త సోర్స్ కోడ్ మేనేజ్‌మెంట్ సిస్టమ్‌ను పరిచయం చేసింది

సాప్లింగ్‌లో మరొక గుర్తించదగిన మెరుగుదల ఏమిటంటే, ఇది లోపాలను పరిష్కరించడం మరియు పరిష్కరించడం మరియు మునుపటి స్థితికి తిరిగి రావడాన్ని సులభతరం చేస్తుంది. ఉదాహరణకు, "sl undo", "sl redo", "sl uncommit" మరియు "sl unamend" కమాండ్‌లు అనేక ఆపరేషన్‌లను వెనక్కి తీసుకోవడానికి అందించబడతాయి; కమిట్‌లను తాత్కాలికంగా దాచడానికి "sl hide" మరియు "sl unhide" కమాండ్‌లు ఉపయోగించబడతాయి; మరియు పాత రాష్ట్రాల ద్వారా ఇంటరాక్టివ్ నావిగేషన్ కోసం మరియు “sl undo -i కమాండ్” కమాండ్‌తో పేర్కొన్న పాయింట్‌కి తిరిగి వెళ్లండి. సప్లింగ్ కమిట్ స్టాక్ అనే భావనకు కూడా మద్దతు ఇస్తుంది, ఇది సంక్లిష్ట కార్యాచరణను చిన్న, మరింత అర్థమయ్యే పెంపుదల మార్పుల (ప్రాథమిక ఫ్రేమ్‌వర్క్ నుండి పూర్తయిన ఫంక్షన్ వరకు) సెట్ చేయడం ద్వారా దశల వారీ సమీక్షలను నిర్వహించడానికి మిమ్మల్ని అనుమతిస్తుంది.

మార్పులను సమీక్షించడానికి రివ్యూస్టాక్ ఇంటర్‌ఫేస్‌తో సహా అనేక చేర్పులు సప్లింగ్ కోసం సిద్ధం చేయబడ్డాయి (GPLv2 కింద కోడ్), ఇది GitHubలో పుల్ అభ్యర్థనలను ప్రాసెస్ చేయడానికి మరియు మార్పుల స్టాక్ వీక్షణను ఉపయోగించడానికి మిమ్మల్ని అనుమతిస్తుంది. అదనంగా, VSCode మరియు TextMate ఎడిటర్‌లతో ఏకీకరణ కోసం, అలాగే ISL (ఇంటరాక్టివ్ స్మార్ట్‌లాగ్) ఇంటర్‌ఫేస్ మరియు సర్వర్ అమలు కోసం చేర్పులు ప్రచురించబడ్డాయి.

మూలం: opennet.ru

ఒక వ్యాఖ్యను జోడించండి