Facebook tau tshaj tawm qhov kev tswj hwm qhov system tshiab Sapling

Facebook (txwv tsis pub nyob rau hauv Lavxias teb sab Federation) luam tawm Sapling qhov chaw tswj system, siv nyob rau hauv txoj kev loj hlob ntawm lub tuam txhab nyob rau hauv tej yaam num. Lub kaw lus lub hom phiaj los muab cov kev paub txog kev tswj hwm kev sib txuas uas tuaj yeem teev rau cov chaw khaws ntaub ntawv loj heev uas nthuav dav kaum tawm lab ntawm cov ntaub ntawv, cog lus thiab ceg. Tus neeg siv code yog sau hauv Python thiab Rust, thiab qhib raws li GPLv2 daim ntawv tso cai.

Ib feem ntawm cov neeg rau zaub mov tau tsim nyias nyias rau cov chaw taws teeb ua haujlwm tau zoo nrog cov chaw khaws cia thiab cov ntaub ntawv virtual rau kev ua haujlwm nrog cov kab hauv zos ntawm ib feem ntawm qhov chaw khaws cia ua tiav qhov chaw khaws cia (tus tsim tawm pom tag nrho cov chaw khaws cia, tab sis tsuas yog cov ntaub ntawv xav tau uas tau nkag mus. tau theej rau hauv qhov system). Cov cai rau cov khoom siv no siv hauv Facebook cov txheej txheem tseem tsis tau qhib, tab sis lub tuam txhab tau cog lus tias yuav tshaj tawm nws yav tom ntej. Txawm li cas los xij, tam sim no hauv Sapling repository koj tuaj yeem pom cov qauv ntawm Mononoke server (hauv Rust) thiab VFS EdenFS (hauv C ++). Cov khoom no yog xaiv tau thiab Sapling tus neeg siv khoom txaus los ua haujlwm, uas txhawb nqa cloning Git repositories, cuam tshuam nrog servers raws li Git LFS thiab ua haujlwm nrog git hosting qhov chaw xws li GitHub.

Lub tswv yim tseem ceeb ntawm lub kaw lus yog tias thaum sib cuam tshuam nrog ib qho tshwj xeeb ntawm cov neeg rau zaub mov uas muab cov chaw khaws cia, txhua qhov kev ua haujlwm raug ntsuas nyob ntawm seb cov ntaub ntawv siv tau li cas hauv cov cai uas tus tsim tawm ua haujlwm, thiab tsis nyob ntawm tag nrho qhov loj ntawm tag nrho cov chaw cia khoom. Piv txwv li, tus tsim tawm tsuas yog siv ib feem me me ntawm cov lej los ntawm qhov chaw cia loj heev thiab tsuas yog qhov me me yuav raug tsiv mus rau nws lub kaw lus, tsis yog tag nrho cov chaw cia khoom. Cov ntawv teev npe ua haujlwm tau sau dynamically raws li cov ntaub ntawv los ntawm cov chaw khaws cia tau nkag mus, uas, ntawm ib sab, tso cai rau koj kom ua haujlwm nrawm nrog koj feem ntawm cov cai, tab sis ntawm qhov tod tes ua rau qeeb qeeb thaum nkag mus rau cov ntaub ntawv tshiab rau cov ntaub ntawv. thawj zaug thiab yuav tsum tau mus tas li mus rau lub network (sib cais muab thiab offline hom rau kev npaj commits).

Ntxiv nrog rau kev hloov kho cov ntaub ntawv thauj khoom, Sapling kuj tseem siv cov kev ua kom zoo los txo cov ntaub ntawv thauj khoom nrog keeb kwm ntawm kev hloov pauv (piv txwv li, 3/4 ntawm cov ntaub ntawv nyob rau hauv ib qho chaw cia nrog Linux kernel yog keeb kwm ntawm kev hloov). Txhawm rau ua haujlwm tau zoo nrog keeb kwm ntawm kev hloov pauv, cov ntaub ntawv cuam tshuam nrog nws tau muab cia rau hauv ib qho segmented sawv cev uas tso cai rau koj rub tawm ib qho ntawm cov ntawv cog lus los ntawm lub server. Tus neeg siv tuaj yeem thov cov ntaub ntawv los ntawm tus neeg rau zaub mov hais txog kev sib raug zoo ntawm ntau qhov kev cog lus thiab rub tawm tsuas yog qhov tsim nyog ntawm daim duab.

Txoj haujlwm tau tsim kho dhau 10 xyoo dhau los thiab tau tsim los daws cov teeb meem thaum txhim kho kev nkag mus rau cov chaw khaws ntaub ntawv loj heev nrog rau ib ceg ntoo, uas siv cov haujlwm "rebase" es tsis yog "merge". Nyob rau lub sijhawm ntawd, tsis muaj kev qhib kev daws teeb meem rau kev ua haujlwm nrog cov chaw khaws khoom zoo li no, thiab Facebook engineers tau txiav txim siab los tsim cov txheej txheem tswj hwm tshiab uas yuav ua tau raws li cov kev xav tau ntawm lub tuam txhab, es tsis txhob faib cov phiaj xwm mus rau hauv cov chaw cia me me, uas yuav ua rau muaj kev nyuaj siab. Kev tswj hwm kev vam khom (ib zaug, los daws qhov teeb meem zoo sib xws, Microsoft tsim GVFS txheej). Thaum xub thawj, Facebook siv Mercurial system thiab Sapling project ntawm thawj theem tsim los ntxiv rau Mercurial. Nyob rau tib lub sijhawm, lub kaw lus tau hloov mus rau hauv ib txoj haujlwm ywj pheej nrog nws tus kheej raws tu qauv, khaws cia hom thiab cov txheej txheem, uas kuj tau nthuav dav nrog lub peev xwm los cuam tshuam nrog Git repositories.

Rau kev ua haujlwm, ib qho kev hais kom ua kab hluav taws xob "sl" yog muab, uas siv cov ntsiab lus zoo, kev ua haujlwm thiab kev sib cuam tshuam rau cov neeg tsim khoom paub txog Git thiab Mercurial. Cov lus qhia thiab cov lus txib hauv Sapling txawv me ntsis ntawm Git thiab ze rau Mercurial. Piv txwv li, es tsis txhob ntawm cov ceg ntoo, "bookmarks" yog siv (npe ceg tsis tau txais kev txhawb nqa), los ntawm lub neej ntawd, thaum ua tiav clone / rub, tsis yog tag nrho cov chaw khaws cia, tab sis tsuas yog cov ceg tseem ceeb, tsis muaj qhov cim ua ntej ntawm kev cog lus ( staging cheeb tsam), es tsis txhob "git fetch" cov lus txib "sl" yog siv rub", es tsis txhob "git rub" - "sl rub -rebase", es tsis txhob "git checkout COMMIT" - "sl goto COMMIT", es tsis txhob "git reflog" - "sl journal", kom tshem tawm qhov kev hloov pauv hloov "git checkout - FILE" "sl revert FILE" yog teev, thiab "." yog siv los txheeb xyuas "HEAD" ceg. Tab sis feem ntau, cov ntsiab lus dav dav ntawm ceg thiab clone / rub / thawb / ua haujlwm / rov ua haujlwm tau khaws cia.

Ntawm cov yam ntxwv ntxiv ntawm Sapling toolkit, kev txhawb nqa rau "smartlog" sawv tawm, uas tso cai rau koj kom pom kev ntsuas lub xeev ntawm koj qhov chaw khaws cia, qhia txog cov ntaub ntawv tseem ceeb tshaj plaws thiab lim tawm cov ntsiab lus tsis tseem ceeb. Piv txwv li, thaum koj khiav cov nqi hluav taws xob sl yam tsis muaj kev sib cav, tsuas yog koj tus kheej cov kev hloov hauv zos tau tshwm sim rau ntawm qhov screen (lwm tus raug txo qis), lub xeev ntawm cov ceg ntoo sab nraud, cov ntaub ntawv hloov pauv thiab cov qauv tshiab ntawm kev cog lus tau pom. Tsis tas li ntawd, muaj kev sib tham hauv web interface, uas ua rau nws muaj peev xwm mus sai sai los ntawm lub cav ntse, hloov tsob ntoo thiab cog lus.

Facebook tau tshaj tawm qhov kev tswj hwm qhov system tshiab Sapling

Lwm qhov kev txhim kho tseem ceeb hauv Sapling yog tias nws ua rau nws yooj yim dua los kho thiab daws qhov tsis raug thiab rov qab mus rau lub xeev dhau los. Piv txwv li, cov lus txib “sl undo”, “sl redo”, “sl uncommit” thiab “sl unamend” tau muab los thim rov qab ntau txoj haujlwm; cov lus txib “sl zais” thiab “sl unhide” yog siv los zais kev ua haujlwm ib ntus; thiab rau kev sib tham sib navigation los ntawm cov xeev qub thiab rov qab mus rau qhov chaw teev tseg nrog cov lus txib "sl undo -i hais kom ua". Sapling tseem txhawb nqa lub tswv yim ntawm pawg cog lus, uas tso cai rau koj los npaj cov kev tshuaj xyuas ib ntus los ntawm kev rhuav tshem cov haujlwm ua haujlwm rau hauv cov txheej txheem me me, nkag siab ntau dua qhov kev hloov pauv (los ntawm lub hauv paus ntsiab lus mus rau qhov ua tiav tiav).

Ob peb qhov ntxiv tau npaj rau Sapling, suav nrog ReviewStack interface rau kev tshuaj xyuas cov kev hloov pauv (cov cai hauv qab GPLv2), uas tso cai rau koj los ua cov ntawv thov rub tawm ntawm GitHub thiab siv pawg saib ntawm kev hloov pauv. Tsis tas li ntawd, ntxiv tau tshaj tawm rau kev koom ua ke nrog VSCode thiab TextMate editors, nrog rau kev siv ISL (Kev Sib Tham Sib Tham SmartLog) interface thiab server.

Tau qhov twg los: opennet.ru

Ntxiv ib saib