Facebook kompaniyasi Sapling manba kodini boshqarishning yangi tizimini taqdim etdi

Facebook (Rossiyada taqiqlangan) kompaniyaning ichki loyihalarini ishlab chiqishda foydalaniladigan Sapling manba kodini boshqarish tizimini nashr etdi. Tizim o'n millionlab fayllar, majburiyatlar va filiallarni qamrab oluvchi juda katta omborlarni qamrab oladigan tanish versiya interfeysini taqdim etishga qaratilgan. Mijoz kodi Python va Rust tillarida yozilgan va GPLv2 litsenziyasi ostida ochiq.

Alohida-alohida, omborlar bilan samarali masofaviy ishlash uchun server qismi va to'liq omborda bo'lgani kabi, omborning bir qismining mahalliy bo'limi bilan ishlash uchun virtual fayl tizimi ishlab chiqilgan (ishlab chiquvchi butun omborni ko'radi, lekin faqat so'ralgan ma'lumotlar nusxalanadi. kirish mumkin bo'lgan mahalliy tizimga). Facebook infratuzilmasida foydalaniladigan ushbu komponentlar uchun kod hali ochilmagan, biroq kompaniya uni kelajakda nashr etishga va'da bergan. Biroq, Mononoke serverining (Rust-da) va VFS EdenFS (C++-da) prototiplarini allaqachon Sapling omborida topish mumkin. Bu komponentlar ixtiyoriy va Git omborlarini klonlashni, Git LFS asosidagi serverlar bilan ishlashni va GitHub kabi git xostlari bilan ishlashni qo‘llab-quvvatlaydigan Sapling mijozi ishlash uchun yetarli.

Tizimning asosiy g'oyasi shundan iboratki, omborni saqlashni ta'minlaydigan maxsus server qismi bilan o'zaro aloqada bo'lganda, barcha operatsiyalar ishlab chiquvchi ishlayotgan kodda haqiqatda ishlatiladigan fayllar soniga qarab o'lchov qilinadi va unga bog'liq emas. butun omborning umumiy hajmi. Misol uchun, ishlab chiquvchi juda katta ombordagi kodning faqat kichik qismidan foydalanishi mumkin va uning tizimiga butun ombor emas, balki faqat shu kichik qismi o'tkaziladi. Ishchi katalog dinamik ravishda to'ldiriladi, chunki ombordagi fayllarga kirish amalga oshiriladi, bu bir tomondan kodning o'z qismi bilan ishlashni sezilarli darajada tezlashtirishga imkon beradi, lekin boshqa tomondan, birinchi marta kirganingizda sekinlashuvga olib keladi. yangi fayllar va tarmoqqa doimiy kirishni talab qiladi (alohida taqdim etilgan va majburiyatlarni tayyorlashning oflayn rejimi).

Moslashuvchan ma'lumotlarni yuklashdan tashqari, Sapling o'zgarishlar tarixi bilan ma'lumotlarning yuklanishini kamaytirishga qaratilgan optimallashtirishni ham amalga oshiradi (masalan, Linux yadrosi bilan ombordagi ma'lumotlarning 3/4 qismi o'zgarishlar tarixidir). O'zgarishlar tarixi bilan samarali ishlash uchun u bilan bog'liq ma'lumotlar segmentlangan ko'rinishda saqlanadi, bu sizga serverdan topshiriq grafigining alohida qismlarini yuklab olish imkonini beradi. Mijoz serverdan bir nechta majburiyatlarning o'zaro bog'liqligi haqida ma'lumot so'rashi va grafikning faqat kerakli qismini yuklab olishi mumkin.

Loyiha so'nggi 10 yil ichida ishlab chiqilgan va bitta asosiy filial bilan juda katta monolit omborlarga kirishni tashkil qilishda muammolarni hal qilish uchun yaratilgan bo'lib, unda "birlashtirish" o'rniga "qayta tiklash" operatsiyasidan foydalanish amaliyoti qo'llanilgan. O'sha paytda bunday omborlar bilan ishlash uchun ochiq echimlar yo'q edi va Facebook muhandislari loyihalarni kichik omborlarga bo'lish o'rniga kompaniya ehtiyojlariga javob beradigan yangi versiyani boshqarish tizimini yaratishga qaror qilishdi, bu esa yanada murakkab qaramlikni boshqarishga olib keladi. (bir vaqtning o'zida shunga o'xshash muammoni hal qilish uchun Microsoft GVFS qatlamini yaratdi). Dastlab Facebook Mercurial tizimidan foydalangan va Sapling loyihasi dastlab Mercurialga qo'shimcha sifatida ishlab chiqilgan. Vaqt o'tishi bilan tizim o'z protokoli, saqlash formati va algoritmlariga ega bo'lgan mustaqil loyihaga aylandi, u Git omborlari bilan o'zaro aloqa qilish imkoniyati bilan kengaytirildi.

Ish uchun odatiy tushunchalar, ish jarayonlari va Git va Mercurial bilan tanish bo'lgan dasturchilarga tanish bo'lgan interfeysni amalga oshiradigan "sl" buyruq qatori yordam dasturi taklif etiladi. Sapling-dagi terminologiya va buyruqlar Git-dan biroz farq qiladi va Mercurial-ga yaqinroqdir. Masalan, filiallar o'rniga "xatcho'plar" ishlatiladi (nomli filiallar qo'llab-quvvatlanmaydi), sukut bo'yicha, klonlash/tortishish paytida butun ombor yuklanmaydi, faqat asosiy filial yuklanadi, majburiyatlarning dastlabki belgilari yo'q (bosqich maydoni) "git fetch" o'rniga "sl" buyrug'i ishlatiladi pull "git pull" o'rniga - "sl pull --rebase", "git checkout COMMIT" o'rniga - "sl goto COMMIT", o'rniga "sl goto COMMIT" ishlatiladi. "git reflog" - "sl jurnali", o'zgarishlarni qaytarish uchun "git checkout - FILE" o'rniga "sl revert FILE" ko'rsatilgan va "HEAD" filialini aniqlash uchun "." ishlatiladi. Ammo umuman olganda, filiallar va klonlash/tortishish/surish/commit/rebase operatsiyalari haqida umumiy tushunchalar saqlanib qolgan.

Sapling asboblar to'plamining qo'shimcha funktsiyalari orasida "aqlli jurnal" (smartlog) ni qo'llab-quvvatlash alohida ajralib turadi, bu sizning omboringiz holatini vizual baholash, eng muhim ma'lumotlarni ajratib ko'rsatish va mayda tafsilotlarni filtrlash imkonini beradi. Misol uchun, sl yordam dasturini argumentlarsiz ishga tushirganingizda, faqat o'zingizning mahalliy o'zgarishlaringiz ko'rsatiladi (xorijiylar yopiladi), tashqi filiallarning holati, o'zgartirilgan fayllar va topshiriqlarning yangi versiyalari ko'rsatiladi. Bundan tashqari, interaktiv veb-interfeys taklif etiladi, bu aqlli jurnal bo'ylab tezda harakat qilish, daraxtni o'zgartirish va majburiyatlarni bajarish imkonini beradi.

Facebook kompaniyasi Sapling manba kodini boshqarishning yangi tizimini taqdim etdi

Sapling-dagi yana bir e'tiborga molik yaxshilanish - xatolarni tuzatish va tahlil qilish va avvalgi holatga qaytarish jarayonining soddalashtirilganidir. Masalan, "sl undo", "sl redo", "sl uncommit" va "sl unamend" buyruqlari ko'plab operatsiyalarni orqaga qaytarish, "sl hide" va "sl unhide" buyruqlari topshiriqlarni vaqtincha yashirish va interaktiv navigatsiya orqali taklif etiladi. eski holatlar va belgilangan nuqtaga "sl undo -i buyrug'i" buyrug'ini qaytaring. Sapling shuningdek, murakkab funksionallikni kichikroq va tushunarli bosqichma-bosqich o'zgarishlar to'plamiga (asosiy ramkadan tugallangan xususiyatga) bo'lish orqali bosqichma-bosqich ko'rib chiqishni tashkil qilish imkonini beruvchi commit stack kontseptsiyasini qo'llab-quvvatlaydi.

Sapling uchun bir nechta qo'shimchalar, jumladan, o'zgarishlarni ko'rib chiqish uchun ReviewStack interfeysi (GPLv2 ostidagi kod) tayyorlangan, bu sizga GitHub-da tortish so'rovlarini qayta ishlash va o'zgarishlarning stek ko'rinishidan foydalanish imkonini beradi. Bundan tashqari, VSCode va TextMate muharrirlari bilan integratsiyalashuv, shuningdek, ISL (Interactive SmartLog) interfeysi va serverini amalga oshirish uchun qo‘shimchalar chop etildi.

Manba: opennet.ru

a Izoh qo'shish