Facebook meluncurkan sistem kontrol sumber baru Sapling

Facebook (dilarang di Federasi Rusia) menerbitkan sistem kontrol sumber Sapling, yang digunakan dalam pengembangan proyek internal perusahaan. Sistem ini bertujuan untuk menyediakan antarmuka kontrol versi yang familiar dan dapat menskalakan repositori sangat besar yang mencakup puluhan juta file, commit, dan cabang. Kode klien ditulis dengan Python dan Rust, dan terbuka di bawah lisensi GPLv2.

Bagian server telah dikembangkan secara terpisah untuk pekerjaan jarak jauh yang efisien dengan repositori dan sistem file virtual untuk bekerja dengan bagian lokal dari bagian repositori sebagai repositori lengkap (pengembang melihat keseluruhan repositori, tetapi hanya data yang diperlukan yang diakses disalin ke sistem lokal). Kode untuk komponen yang digunakan dalam infrastruktur Facebook ini belum terbuka, namun perusahaan berjanji akan mempublikasikannya di masa mendatang. Namun, saat ini di repositori Sapling Anda sudah dapat menemukan prototipe server Mononoke (di Rust) dan VFS EdenFS (di C++). Komponen-komponen ini bersifat opsional dan klien Sapling cukup untuk berfungsi, yang mendukung kloning repositori Git, berinteraksi dengan server berdasarkan Git LFS dan bekerja dengan situs hosting git seperti GitHub.

Ide utama dari sistem ini adalah ketika berinteraksi dengan bagian server khusus yang menyediakan penyimpanan repositori, semua operasi diskalakan tergantung pada jumlah file yang sebenarnya digunakan dalam kode yang sedang dikerjakan pengembang, dan tidak bergantung pada ukuran total seluruh repositori. Misalnya, seorang pengembang mungkin hanya menggunakan sebagian kecil kode dari repositori yang sangat besar dan hanya sebagian kecil itu yang akan dimigrasikan ke sistemnya, bukan seluruh repositori. Direktori kerja diisi secara dinamis saat file dari repositori diakses, yang, di satu sisi, memungkinkan Anda mempercepat pekerjaan dengan bagian kode Anda secara signifikan, namun di sisi lain menyebabkan perlambatan saat mengakses file baru untuk pertama kali dan memerlukan akses konstan ke jaringan (disediakan secara terpisah dan mode offline untuk mempersiapkan komitmen).

Selain pemuatan data adaptif, Sapling juga mengimplementasikan optimasi yang bertujuan untuk mengurangi pemuatan informasi dengan riwayat perubahan (misalnya, 3/4 data dalam repositori dengan kernel Linux adalah riwayat perubahan). Untuk bekerja secara efektif dengan riwayat perubahan, data yang terkait dengannya disimpan dalam representasi tersegmentasi yang memungkinkan Anda mengunduh bagian individual dari grafik penerapan dari server. Klien dapat meminta informasi dari server tentang hubungan antara beberapa komitmen dan hanya mengunduh bagian grafik yang diperlukan.

Proyek ini telah berkembang selama 10 tahun terakhir dan diciptakan untuk memecahkan masalah ketika mengatur akses ke repositori monolitik yang sangat besar dengan satu cabang master, yang menggunakan operasi “rebase” alih-alih “penggabungan”. Pada saat itu, belum ada solusi terbuka untuk bekerja dengan repositori semacam itu, dan para insinyur Facebook memutuskan untuk membuat sistem kontrol versi baru yang akan memenuhi kebutuhan perusahaan, daripada membagi proyek menjadi repositori kecil, yang akan menyebabkan kompleksitas. manajemen ketergantungan (pada suatu waktu, untuk memecahkan masalah serupa, Microsoft membuat lapisan GVFS). Awalnya Facebook menggunakan sistem Mercurial dan proyek Sapling pada tahap pertama dikembangkan sebagai tambahan Mercurial. Seiring waktu, sistem berubah menjadi proyek independen dengan protokol, format penyimpanan, dan algoritmanya sendiri, yang juga diperluas dengan kemampuan untuk berinteraksi dengan repositori Git.

Untuk pekerjaan, utilitas baris perintah "sl" ditawarkan, yang mengimplementasikan konsep umum, alur kerja, dan antarmuka yang familier bagi pengembang yang akrab dengan Git dan Mercurial. Terminologi dan perintah di Sapling sedikit berbeda dari Git dan lebih mirip dengan Mercurial. Misalnya, alih-alih cabang, "bookmark" digunakan (cabang bernama tidak didukung), secara default, ketika menjalankan clone/pull, tidak seluruh repositori dimuat, tetapi hanya cabang utama, tidak ada penandaan awal dari komit ( area pementasan), alih-alih "git mengambil" perintah "sl" digunakan tarik", alih-alih "git pull" - "sl pull -rebase", alih-alih "git checkout COMMIT" - "sl goto COMMIT", alih-alih "git reflog" - "sl journal", untuk membatalkan perubahan alih-alih "git checkout - FILE" "sl revert FILE" ditentukan, dan "." digunakan untuk mengidentifikasi cabang "HEAD". Namun secara umum, konsep umum operasi cabang dan clone/pull/Push/commit/rebase dipertahankan.

Di antara fitur-fitur tambahan dari toolkit Sapling, dukungan untuk “smartlog” menonjol, yang memungkinkan Anda menilai secara visual keadaan repositori Anda, menyorot informasi paling penting dan menyaring detail yang tidak penting. Misalnya, ketika Anda menjalankan utilitas sl tanpa argumen, hanya perubahan lokal Anda sendiri yang ditampilkan di layar (yang lain diminimalkan), status cabang eksternal, file yang diubah, dan versi penerapan baru yang ditampilkan. Selain itu, antarmuka web interaktif juga ditawarkan, yang memungkinkan navigasi cepat melalui smart log, mengubah pohon, dan melakukan.

Facebook meluncurkan sistem kontrol sumber baru Sapling

Peningkatan penting lainnya pada Sapling adalah mempermudah perbaikan dan penyelesaian kesalahan serta kembali ke keadaan sebelumnya. Misalnya, perintah “sl undo”, “sl redo”, “sl uncommit” dan “sl unamend” ditawarkan untuk mengembalikan banyak operasi; perintah “sl hide” dan “sl unhide” digunakan untuk menyembunyikan komitmen sementara; dan untuk navigasi interaktif melalui status lama dan kembali ke titik yang ditentukan dengan perintah "sl undo -i command". Sapling juga mendukung konsep tumpukan komit, yang memungkinkan Anda mengatur tinjauan langkah demi langkah dengan memecah fungsionalitas kompleks menjadi serangkaian perubahan bertahap yang lebih kecil dan lebih mudah dipahami (dari kerangka dasar hingga fungsi yang sudah selesai).

Beberapa tambahan telah disiapkan untuk Sapling, termasuk antarmuka ReviewStack untuk meninjau perubahan (kode di bawah GPLv2), yang memungkinkan Anda memproses permintaan penarikan di GitHub dan menggunakan tampilan tumpukan perubahan. Selain itu, penambahan telah dipublikasikan untuk integrasi dengan editor VSCode dan TextMate, serta implementasi antarmuka dan server ISL (Interactive SmartLog).

Sumber: opennet.ru

Tambah komentar