Facebook memperkenalkan sistem pengurusan kod sumber baharu Sapling

Facebook (diharamkan di Rusia) telah menerbitkan sistem pengurusan kod sumber Sapling yang digunakan dalam pembangunan projek dalaman syarikat. Sistem ini bertujuan untuk menyediakan antara muka versi biasa yang boleh menskalakan kepada repositori yang sangat besar yang merangkumi berpuluh-puluh juta fail, komit dan cawangan. Kod pelanggan ditulis dalam Python dan Rust, dan dibuka di bawah lesen GPLv2.

Secara berasingan, bahagian pelayan telah dibangunkan untuk kerja jauh yang berkesan dengan repositori dan sistem fail maya untuk bekerja dengan kepingan tempatan sebahagian daripada repositori seperti dengan repositori penuh (pembangun melihat keseluruhan repositori, tetapi hanya data yang diminta disalin kepada sistem tempatan, yang diakses). Kod untuk komponen ini yang digunakan dalam infrastruktur Facebook masih belum dibuka, tetapi syarikat itu berjanji untuk menerbitkannya pada masa hadapan. Walau bagaimanapun, prototaip pelayan Mononoke (dalam Rust) dan VFS EdenFS (dalam C++) sudah boleh ditemui dalam repositori Sapling. Komponen ini adalah pilihan dan klien Sapling cukup untuk berfungsi, yang menyokong pengklonan repositori Git, berinteraksi dengan pelayan berdasarkan Git LFS, dan bekerja dengan hos git seperti GitHub.

Idea utama sistem ialah apabila berinteraksi dengan bahagian pelayan khas yang menyediakan penyimpanan repositori, semua operasi diskalakan bergantung pada bilangan fail yang sebenarnya digunakan dalam kod yang sedang diusahakan oleh pembangun, dan tidak bergantung pada jumlah saiz keseluruhan repositori. Sebagai contoh, pembangun boleh menggunakan hanya sebahagian kecil kod daripada repositori yang sangat besar, dan hanya bahagian kecil ini, bukannya keseluruhan repositori, akan dipindahkan ke sistemnya. Direktori kerja diisi secara dinamik, kerana fail dari repositori diakses, yang, dalam satu tangan, membolehkan anda mempercepatkan kerja dengan ketara dengan bahagian kod anda, tetapi sebaliknya, membawa kepada kelembapan apabila anda mula-mula mengakses fail baharu dan memerlukan akses berterusan kepada rangkaian (disediakan secara berasingan dan mod luar talian penyediaan komit).

Selain pemuatan data adaptif, Sapling juga melaksanakan pengoptimuman yang bertujuan untuk mengurangkan pemuatan maklumat dengan sejarah perubahan (contohnya, 3/4 daripada data dalam repositori dengan kernel Linux adalah sejarah perubahan). Untuk berfungsi dengan berkesan dengan sejarah perubahan, data yang dikaitkan dengannya disimpan dalam paparan bersegmen, yang membolehkan anda memuat turun bahagian berasingan graf komit daripada pelayan. Pelanggan boleh meminta pelayan untuk maklumat tentang hubungan beberapa komit dan memuat turun hanya bahagian graf yang diperlukan.

Projek ini telah dibangunkan sejak 10 tahun yang lalu dan dicipta untuk menyelesaikan masalah apabila mengatur akses kepada repositori monolitik yang sangat besar dengan satu cawangan induk, di mana amalan menggunakan operasi "rebase" dan bukannya "gabungan" diamalkan. Pada masa itu, tiada penyelesaian terbuka untuk bekerja dengan repositori sedemikian, dan jurutera Facebook memutuskan untuk mencipta sistem kawalan versi baharu yang memenuhi keperluan syarikat, dan bukannya membahagikan projek kepada repositori kecil, yang akan membawa kepada pengurusan pergantungan yang lebih rumit. (pada satu masa, untuk menyelesaikan masalah yang sama, Microsoft mencipta lapisan GVFS). Pada mulanya, Facebook menggunakan sistem Mercurial dan projek Sapling pada mulanya dibangunkan sebagai tambahan kepada Mercurial. Dari masa ke masa, sistem berubah menjadi projek bebas dengan protokol, format storan dan algoritmanya sendiri, yang turut diperluaskan dengan keupayaan untuk berinteraksi dengan repositori Git.

Untuk kerja, utiliti baris perintah "sl" dicadangkan, yang melaksanakan konsep biasa, aliran kerja dan antara muka yang biasa kepada pembangun yang biasa dengan Git dan Mercurial. Terminologi dan arahan dalam Sapling sedikit berbeza daripada Git dan lebih dekat dengan Mercurial. Sebagai contoh, "penanda halaman" digunakan dan bukannya cawangan (cawangan bernama tidak disokong), secara lalai, apabila melakukan klon / tarik, bukan keseluruhan repositori dimuatkan, tetapi hanya cawangan utama, tiada pra-teg komit ( kawasan pementasan), bukannya "git fetch" arahan "sl" digunakan pull", bukannya "git pull" - "sl pull --rebase", bukannya "git checkout COMMIT" - "sl goto COMMIT", sebaliknya daripada "git reflog" - "sl journal", untuk mengembalikan perubahan dan bukannya "git checkout - FILE" "sl revert FILE" ditentukan, dan "." digunakan untuk mengenal pasti cawangan "HEAD". Tetapi secara umum, konsep umum cawangan dan operasi klon/tarik/tolak/komit/rebase dipelihara.

Antara ciri tambahan kit alat Sapling, sokongan untuk "log pintar" (smartlog) menonjol, yang membolehkan anda menilai secara visual keadaan repositori anda, menyerlahkan maklumat yang paling penting dan menapis butiran kecil. Sebagai contoh, apabila anda menjalankan utiliti sl tanpa hujah, hanya perubahan tempatan anda sendiri dipaparkan (yang asing diruntuhkan), status cawangan luaran, fail yang diubah dan versi komit baharu ditunjukkan. Selain itu, antara muka web interaktif ditawarkan, yang membolehkan anda menavigasi log pintar, menukar pepohon dan komitmen dengan cepat.

Facebook memperkenalkan sistem pengurusan kod sumber baharu Sapling

Satu lagi penambahbaikan ketara dalam Anak Pokok ialah memudahkan proses membetulkan dan menghurai ralat, dan kembali kepada keadaan sebelumnya. Sebagai contoh, arahan "sl undo", "sl redo", "sl uncommit" dan "sl unamend" ditawarkan untuk melancarkan semula banyak operasi, arahan "sl hide" dan "sl unhide" untuk menyembunyikan commit buat sementara waktu dan navigasi interaktif melalui keadaan lama dan kembali ke titik yang ditentukan arahan "sl undo -i command". Anak pokok juga menyokong konsep timbunan komit, yang membolehkan anda mengatur semakan langkah demi langkah dengan memecahkan fungsi kompleks kepada satu set perubahan tambahan yang lebih kecil dan lebih mudah difahami (daripada rangka kerja asas kepada ciri siap).

Beberapa alat tambah telah disediakan untuk Sapling, termasuk antara muka ReviewStack untuk menyemak perubahan (kod di bawah GPLv2), yang membolehkan anda memproses permintaan tarik pada GitHub dan menggunakan paparan tindanan perubahan. Selain itu, penambahan telah diterbitkan untuk penyepaduan dengan editor VSCode dan TextMate, serta pelaksanaan antara muka dan pelayan ISL (Interactive SmartLog).

Sumber: opennet.ru

Tambah komen