Facebook ngenalkeun sistem manajemen kode sumber anyar Sapling

Facebook (dilarang di Féderasi Rusia) diterbitkeun sistem kontrol sumber Sapling, dipaké dina ngembangkeun proyék parusahaan internal. Sistim ieu boga tujuan pikeun nyadiakeun panganteur kontrol versi akrab nu bisa skala pikeun repositories kacida gedéna ngawengku puluhan juta file, commits jeung cabang. Kodeu klien ditulis dina Python jeung Rust, tur dibuka dina lisénsi GPLv2.

Bagian server parantos dikembangkeun sacara misah pikeun padamelan jarak jauh anu efisien sareng repositori sareng sistem file virtual pikeun damel sareng nyiksikan lokal bagian tina gudang salaku gudang lengkep (pamekar ningali sadaya gudang, tapi ngan ukur data anu diperyogikeun anu diakses. disalin kana sistem lokal). Kodeu pikeun komponén-komponén ieu anu dianggo dina infrastruktur Facebook henteu acan kabuka, tapi perusahaan parantos jangji bakal nyebarkeunana di hareup. Nanging, ayeuna di gudang Sapling anjeun parantos mendakan prototipe server Mononoke (dina Rust) sareng VFS EdenFS (dina C ++). Komponén ieu opsional sareng klien Sapling cekap damel, anu ngadukung kloning repositori Git, berinteraksi sareng server dumasar kana Git LFS sareng damel sareng situs hosting git sapertos GitHub.

Gagasan utama sistem nyaéta nalika berinteraksi sareng bagian server khusus anu nyayogikeun panyimpen gudang, sadaya operasi diskalakeun gumantung kana jumlah file anu leres-leres dianggo dina kode anu dianggo ku pamekar, sareng henteu gumantung kana. ukuran total sakabéh gudang. Salaku conto, pamekar tiasa ngan ukur nganggo sabagian leutik kode tina gudang anu ageung sareng ngan sabagian alit anu bakal dimigrasikeun ka sistemna, sanés sadayana gudang. Diréktori kerja dieusi sacara dinamis nalika file tina gudang diaksés, anu, di hiji sisi, ngamungkinkeun anjeun sacara signifikan nyepetkeun damel sareng bagian kode anjeun, tapi di sisi sanésna nyababkeun kalambatan nalika ngaksés file énggal pikeun kahiji kalina sarta merlukeun aksés konstan kana jaringan (disadiakeun misah tur mode offline pikeun commits Nyiapkeun).

Salian loading data adaptif, Sapling ogé implements optimizations aimed dina ngurangan loading inpormasi kalawan sajarah parobahan (contona, 3/4 tina data dina Repository kalawan kernel Linux Ubuntu nyaéta sajarah parobahan). Pikeun tiasa dianggo sacara efektif sareng sajarah parobihan, data anu aya hubunganana disimpen dina perwakilan ségméntasi anu ngamungkinkeun anjeun ngaunduh bagian-bagian individu tina grafik komitmen tina server. klien nu bisa menta informasi ti server ngeunaan hubungan antara sababaraha commits tur ngundeur ukur bagian diperlukeun tina grafik.

Proyék ieu parantos dikembangkeun salami 10 taun ka pengker sareng diciptakeun pikeun ngabéréskeun masalah nalika ngatur aksés ka repositori monolithic anu ageung sareng hiji cabang master, anu nganggo operasi "rebase" tinimbang "ngagabung". Dina waktos éta, teu aya solusi anu kabuka pikeun damel sareng repositori sapertos kitu, sareng insinyur Facebook mutuskeun pikeun nyiptakeun sistem kontrol vérsi énggal anu bakal nyumponan kabutuhan perusahaan, tibatan ngabagi proyék-proyék kana repositori alit, anu bakal nyababkeun pajeulitna. manajemén kagumantungan (dina hiji waktu, pikeun ngajawab masalah sarupa, Microsoft dijieun lapisan GVFS). Mimitina, Facebook nganggo sistem Mercurial sareng proyék Sapling dina tahap munggaran dikembangkeun salaku tambahan pikeun Mercurial. Leuwih waktos, sistem robah jadi hiji proyék bebas kalawan protokol sorangan, format gudang sarta algoritma, nu ogé dimekarkeun kalawan kamampuhan pikeun berinteraksi sareng repositories Git.

Pikeun digawé, hiji utilitas garis paréntah "sl" ditawarkeun, nu implements konsép has, workflows sarta panganteur akrab jeung pamekar akrab jeung Git na Mercurial. Terminologi sareng paréntah dina Sapling rada béda ti Git sareng langkung caket kana Mercurial. Salaku conto, tibatan cabang, "téténggér" dianggo (cabang anu namina henteu dirojong), sacara standar, nalika ngalaksanakeun clone/tarik, henteu sadayana gudang dimuat, tapi ngan cabang utama, teu aya tanda awal commits ( aréa pementasan), tinimbang "git fetch" paréntah "sl" dipaké pull", tinimbang "git pull" - "sl pull -rebase", tinimbang "git checkout COMMIT" - "sl goto COMMIT", tinimbang "git reflog" - "sl journal", pikeun ngabolaykeun parobahan tinimbang "git Checkout - FILE" "sl revert FILE" dieusian, sarta "." dipaké pikeun ngaidentipikasi cabang "HEAD". Tapi sacara umum, konsép umum cabang sareng operasi clone / pull / push / commit / rebase dilestarikan.

Diantara fitur tambahan tina toolkit Sapling, dukungan pikeun "smartlog" nangtung, anu ngamungkinkeun anjeun sacara visual ngevaluasi kaayaan gudang anjeun, nyorot inpormasi anu paling penting sareng nyaring detil anu teu penting. Salaku conto, nalika anjeun ngajalankeun utiliti sl tanpa alesan, ngan ukur parobahan lokal anjeun sorangan anu dipidangkeun dina layar (lain diminimalkeun), kaayaan cabang éksternal, file anu dirobih sareng versi commits énggal ditampilkeun. Sajaba ti, hiji panganteur web interaktif ditawarkeun, nu ngamungkinkeun pikeun gancang napigasi ngaliwatan log pinter, ngarobah tangkal jeung commits.

Facebook ngenalkeun sistem manajemen kode sumber anyar Sapling

Perbaikan anu sanés dina Sapling nyaéta ngagampangkeun ngalereskeun sareng ngabéréskeun kasalahan sareng dibalikkeun deui ka kaayaan sateuacana. Salaku conto, paréntah "sl undo", "sl redo", "sl uncommit" sareng "sl unamend" ditawarkeun pikeun ngagulung deui seueur operasi; paréntah "sl hide" sareng "sl unhide" dianggo pikeun samentawis nyumputkeun commits; sarta pikeun navigasi interaktif ngaliwatan nagara heubeul tur balik ka titik dieusian ku paréntah "sl undo -i paréntah". Sapling ogé ngadukung konsép tumpukan komit, anu ngamungkinkeun anjeun ngatur ulasan léngkah-léngkah ku ngarobih fungsionalitas kompleks kana sakumpulan parobihan tambahan anu langkung alit, langkung kaharti (tina kerangka dasar dugi ka fungsi réngsé).

Sababaraha tambahan geus disiapkeun pikeun Sapling, kaasup ReviewStack panganteur pikeun reviewing parobahan (kode handapeun GPLv2), nu ngidinan Anjeun pikeun ngolah requests tarikan on GitHub tur ngagunakeun tempoan tumpukan parobahan. Sajaba ti éta, tambahan geus diterbitkeun pikeun integrasi jeung VSCode na TextMate redaktur, kitu ogé palaksanaan ISL (Interactive SmartLog) panganteur na server.

sumber: opennet.ru

Tambahkeun komentar