Ini adalah skenario umum bahwa basis kode dari suatu produk yang dipegang oleh repositori di beberapa sistem VCS berevolusi ke titik di mana basis kode itu dapat dilihat sebagai mengandung beberapa produk. Memisahkan basis kode di beberapa repositori VCS, masing-masing didedikasikan untuk satu produk, dapat memanfaatkan beberapa manfaat (lihat Manfaat memiliki produk per repositori VCS atas model repositori mengasapi di bawah). Di sisi teknis, pemisahan basis kode adalah langkah yang agak mudah karena kebanyakan VCS mendukung operasi ini. Namun pemisahan ini dapat menimbulkan masalah teknis terkait dengan pengujian otomatis, pengiriman berkelanjutan, integrasi atau pemantauan layanan (lihat Masalah yang diangkat oleh pemisahan tersebut.) Organisasi yang berencana melakukan pemisahan seperti itu perlu tahu bagaimana melakukan transisi ini semulus mungkin, yaitu, tanpa mengganggu pengiriman dan pemantauan pipa mereka. Langkah pertama ini mungkin untuk lebih memahami gagasan proyek dan bagaimana menggambarkan pemisahan dalam basis kode monolitik.
Dalam jawaban atas pertanyaan ini, saya ingin melihat:
Upaya untuk memberikan definisi yang berfungsi tentang apa produk itu, yang memberikan kriteria praktis untuk benar-benar menggambarkan produk dalam basis kode yang ada.
Menurut definisi kerja ini, uraikan rencana yang benar-benar melakukan pemisahan. Kita dapat membuat asumsi penyederhanaan bahwa basis kode diproses oleh sdlc sepenuhnya otomatis yang menerapkan integrasi berkelanjutan dan pengiriman kontinu . Yaitu, setiap cabang divalidasi oleh suatu testuite otomatis yang diimplementasikan dalam basis kode saat ini dan masing-masing bergabung ke beberapa cabang "ajaib" menghasilkan artefak produk yang diuji dan digunakan. ( Artefak Produk yang misalnya tarball sumber, dokumentasi, paket perangkat lunak biner, Docker gambar, Amis, unikernels.)
Rencana seperti itu memuaskan jika menjelaskan cara untuk menghindari
Masalah yang diangkat oleh perpecahan
Bagaimana prosedur pengujian otomatis berhubungan dengan repositori monolitik yang sudah ada sebelumnya dan repositori split?
Bagaimana prosedur penyebaran otomatis terkait dengan repositori monolitik yang sudah ada sebelumnya dan repositori split?
Di mana disimpan kode untuk prosedur penyebaran otomatis sendiri?
Di mana infrastruktur tersimpan , pemantauan , dan strategi ketersediaan tinggi ?
Bagaimana memastikan bahwa pengembang hanya membutuhkan satu basis kode pada satu waktu (tetapi mungkin menggunakan artefak dari basis kode lain).
Bagaimana alat seperti git-membagi dua
Catatan marjinal: Manfaat memiliki produk per repositori VCS atas model repositori mengasapi
Memiliki beberapa repositori kecil yang memegang basis kode untuk produk tertentu memiliki keuntungan sebagai berikut atas pendekatan "repositori bloat":
Dengan repositori mengasapi sulit untuk memutar kembali rilis ketika suatu produk tidak stabil, karena sejarah dicampur dengan riwayat produk lainnya.
Dengan repositori mengasapi, sulit untuk meninjau riwayat proyek atau penarikan, dengan repositori kecil, kami lebih cenderung membaca informasi ini. (Ini mungkin khusus untuk VCS seperti git, di mana tidak seperti svn, kami tidak dapat checkout subtrees!)
Dengan repositori mengasapi, kita harus melakukan lebih banyak tarian cabang ketika kita berkembang. Jika kita memiliki repositori N, kita dapat bekerja secara paralel pada cabang N, jika kita hanya memiliki 1 repositori, kita hanya dapat bekerja pada satu cabang, atau memiliki banyak copy pekerjaan yang juga sulit untuk ditangani.
Dengan beberapa repositori kecil, log memberikan peta panas proyek. Mereka bahkan dapat digunakan sebagai proksi difusi pengetahuan dalam tim pengembang: jika saya tidak melakukan dalam repo X sejak 3 bulan, mungkin lebih baik untuk menugaskan saya dalam tim yang mengerjakan repo X sehingga saya tetap mengetahui perkembangannya. dalam komponen itu.
Dengan repositori kecil, lebih mudah mendapatkan gambaran umum yang jelas tentang suatu komponen. Jika semuanya berjalan dalam satu repositori besar, tidak ada artefak nyata yang menggambarkan setiap komponen, dan basis kode dapat dengan mudah melayang ke arah bola lumpur yang besar .
Gudang kecil memaksa kita untuk bekerja pada antarmuka antar komponen. Tetapi karena kita ingin memiliki kapsul yang baik, ini adalah pekerjaan yang harus kita lakukan, jadi saya akan menghitung ini sebagai keuntungan untuk repositori kecil.
Dengan beberapa repositori kecil, lebih mudah memiliki beberapa pemilik produk.
Dengan beberapa repositori kecil, lebih mudah untuk memiliki standar kode sederhana yang berkaitan dengan repositori penuh dan yang dapat diverifikasi secara otomatis.