Facebook компани эх кодын удирдлагын шинэ систем болох Sapling-ийг танилцууллаа

Facebook (ОХУ-д хориглосон) компанийн дотоод төслүүдийг боловсруулахад ашигласан Sapling эх кодын удирдлагын системийг нийтэлжээ. Энэхүү систем нь олон арван сая файл, үүргүүд болон салбаруудыг хамарсан маш том агуулах хүртэл өргөтгөх боломжтой танил хувилбарын интерфейсээр хангах зорилготой юм. Үйлчлүүлэгчийн код нь Python болон Rust хэл дээр бичигдсэн бөгөөд GPLv2 лицензийн дагуу нээлттэй.

Хадгалах газартай алсын зайнаас үр дүнтэй ажиллахад зориулагдсан серверийн хэсгийг тусад нь боловсруулсан бөгөөд репозиторын нэг хэсгийн локал хэсэгтэй бүрэн репозитортой ажиллахад зориулагдсан виртуал файлын системийг боловсруулсан болно (хөгжүүлэгч нь хадгалах газрыг бүхэлд нь хардаг, гэхдээ зөвхөн хүссэн өгөгдлийг хуулдаг. хандсан орон нутгийн системд). Фэйсбүүкийн дэд бүтцэд ашиглагдаж буй эдгээр бүрэлдэхүүн хэсгүүдийн код хараахан нээгдээгүй байгаа ч компани үүнийг ирээдүйд нийтлэхээ амласан. Гэсэн хэдий ч Mononoke серверийн (Rust-д) болон VFS EdenFS (C++)-ийн прототипүүдийг Sapling репозитороос аль хэдийн олж болно. Эдгээр бүрэлдэхүүн хэсгүүд нь нэмэлт бөгөөд Sapling клиент нь ажиллахад хангалттай бөгөөд энэ нь Git репозиторуудыг хувилах, Git LFS дээр суурилсан серверүүдтэй харилцах, GitHub зэрэг git хостуудтай ажиллахад тусалдаг.

Системийн гол санаа нь репозиторыг хадгалах боломжийг олгодог тусгай серверийн хэсэгтэй харьцахдаа бүх үйлдлүүд нь хөгжүүлэгчийн ажиллаж байгаа кодонд ашигласан файлуудын тооноос хамаарч масштабтай байдаг бөгөөд үүнээс хамаардаггүй. бүх агуулахын нийт хэмжээ. Жишээлбэл, хөгжүүлэгч нь маш том агуулахаас кодын зөвхөн багахан хэсгийг ашиглаж болох бөгөөд бүх репозитороос илүү зөвхөн энэ жижиг хэсгийг л түүний системд шилжүүлэх болно. Хадгалах сангаас файлууд руу ханддаг тул ажлын лавлах динамикаар дүүрдэг бөгөөд энэ нь нэг талаас кодын хэсэгтэй ажиллах ажлыг ихээхэн хурдасгах боломжийг олгодог боловч нөгөө талаас та анх нэвтрэх үед удаашрахад хүргэдэг. шинэ файлууд болон сүлжээнд байнга нэвтрэх шаардлагатай байдаг (тус тусад нь хангагдсан ба офлайн горимд даалгавар бэлтгэх).

Дасан зохицох өгөгдөл ачааллаас гадна Sapling нь өөрчлөлтийн түүхтэй мэдээллийн ачааллыг багасгахад чиглэсэн оновчлолыг хэрэгжүүлдэг (жишээлбэл, Линукс цөм бүхий репозитор дахь өгөгдлийн 3/4 нь өөрчлөлтийн түүх юм). Өөрчлөлтийн түүхтэй үр дүнтэй ажиллахын тулд үүнтэй холбоотой өгөгдлийг сегментчилсэн харагдацад хадгалдаг бөгөөд энэ нь танд өгөгдлийн графикийн салангид хэсгүүдийг серверээс татаж авах боломжийг олгодог. Үйлчлүүлэгч серверээс хэд хэдэн үүргийн харилцааны талаар мэдээлэл авахыг хүсч, зөвхөн графикийн шаардлагатай хэсгийг татаж авах боломжтой.

Энэхүү төслийг сүүлийн 10 жилийн хугацаанд боловсруулсан бөгөөд нэг мастер салбартай маш том цул агуулах руу нэвтрэх асуудлыг шийдвэрлэх зорилгоор бүтээгдсэн бөгөөд үүнд "нэгтгэх" бус "дахин суурь" үйлдлийг ашиглах практикийг хэрэгжүүлсэн. Тухайн үед ийм хадгалах газартай ажиллах нээлттэй шийдэл байгаагүй бөгөөд Facebook-ийн инженерүүд төслүүдийг жижиг репозиторууд болгон хуваахын оронд компанийн хэрэгцээ шаардлагад нийцсэн шинэ хувилбарын хяналтын системийг бий болгохоор шийдсэн нь илүү төвөгтэй хараат байдлын менежментэд хүргэх болно. (Нэгэн удаа ижил төстэй асуудлыг шийдэхийн тулд Microsoft GVFS давхарга үүсгэсэн). Анх Facebook Mercurial системийг ашиглаж байсан бөгөөд Spling төслийг анх Mercurial-д нэмэлт болгон боловсруулсан. Цаг хугацаа өнгөрөхөд систем нь өөрийн протокол, хадгалах формат, алгоритмтай бие даасан төсөл болж хувирсан бөгөөд энэ нь Git репозитортой харилцах чадвартай болсон.

Ажлын хувьд Git болон Mercurial-ийг мэддэг хөгжүүлэгчдэд танил болсон ердийн ойлголт, ажлын урсгал, интерфейсийг хэрэгжүүлдэг "sl" командын мөрийн хэрэгслийг санал болгож байна. Sapling-ийн нэр томъёо, тушаалууд нь Git-ээс арай өөр бөгөөд Mercurial-тай ойр байдаг. Жишээлбэл, салбаруудын оронд "хавчуурга" ашигладаг (нэрлэсэн салбарууд дэмжигдээгүй), анхдагч байдлаар, клон / татах үед бүх репозиторыг ачаалдаггүй, харин зөвхөн үндсэн салбарыг ачаалдаггүй. талбар) "git fetch"-ын оронд "sl" гэсэн командыг pull, "git pull" - "sl pull --rebase"-ын оронд, "git checkout COMMIT" - "sl goto COMMIT"-ын оронд "sl goto COMMIT"-ыг ашигладаг. "git reflog" - "sl journal", өөрчлөлтийг буцаахын тулд "git checkout - FILE"-ын оронд "sl revert FILE" гэж заасан бөгөөд "." нь "HEAD" салбарыг тодорхойлоход хэрэглэгддэг. Гэхдээ ерөнхийдөө салбарууд болон clone/pull/push/commit/rebase үйлдлийн тухай ерөнхий ойлголтууд хадгалагдан үлджээ.

Sapling хэрэгслийн нэмэлт боломжуудын дотроос "ухаалаг бүртгэл" (smartlog)-ийн дэмжлэг нь онцгой бөгөөд энэ нь таны агуулахын төлөв байдлыг нүдээр үнэлэх, хамгийн чухал мэдээллийг тодруулах, жижиг нарийн ширийн зүйлийг шүүх боломжийг олгодог. Жишээлбэл, та sl хэрэгслийг аргументгүйгээр ажиллуулахад зөвхөн өөрийн дотоод өөрчлөлтүүд (гадных нь хумигдсан), гадаад салбаруудын байдал, өөрчлөгдсөн файлууд, шинэ хувилбаруудын шинэ хувилбарууд харагдана. Нэмж дурдахад интерактив вэб интерфэйсийг санал болгож байгаа бөгөөд энэ нь ухаалаг бүртгэлээр хурдан шилжих, модыг өөрчлөх, үйлдлийг хийх боломжтой болгодог.

Facebook компани эх кодын удирдлагын шинэ систем болох Sapling-ийг танилцууллаа

Суулгацын өөр нэг мэдэгдэхүйц сайжруулалт бол алдаа засах, задлан шинжлэх, өмнөх төлөв рүү буцах үйл явцыг хялбаршуулсан явдал юм. Жишээлбэл, "sl undo", "sl redo", "sl uncommit", "sl unamend" гэсэн командууд нь олон үйлдлийг буцаах, "sl hide" болон "sl unhide" коммандуудыг түр нуух, интерактив навигац зэргийг санал болгодог. хуучин төлөвүүдээр дамжуулан "sl undo -i команд" гэсэн командыг заасан цэг рүү буцаана уу. Sapling нь commit stack-ийн үзэл баримтлалыг дэмждэг бөгөөд энэ нь нарийн төвөгтэй функцуудыг жижиг, илүү ойлгомжтой нэмэлт өөрчлөлтүүдийн багц болгон задлах замаар алхам алхмаар хянан зохион байгуулах боломжийг олгодог (үндсэн хүрээнээс дууссан функц хүртэл).

Sapling-д зориулж хэд хэдэн нэмэлтүүдийг бэлтгэсэн бөгөөд үүнд өөрчлөлтийг шалгах ReviewStack интерфэйс (GPLv2 дээрх код) нь GitHub дээр татах хүсэлтийг боловсруулах, өөрчлөлтийн стек харагдацыг ашиглах боломжийг олгодог. Нэмж дурдахад, VSCode болон TextMate редакторуудтай нэгтгэх, мөн ISL (Интерактив SmartLog) интерфейс болон серверийг хэрэгжүүлэх нэмэлтүүд нийтлэгдсэн.

Эх сурвалж: opennet.ru

сэтгэгдэл нэмэх