Berbagi bagian dari monorepo

12

Saat ini kami memiliki sistem build yang kompleks dan tidak efisien yang terdiri dari banyak repo SVN dan Git (masing-masing sekitar 50%), termasuk yang merupakan repo submodul git. Kami juga memiliki skrip buatan sendiri yang mengelola semuanya dengan baik.
Poin utama dari basis kode (sumber tertutup) kami adalah bahwa ia digabungkan secara ketat, dan setiap proyek dirilis pada waktu yang sama di bawah versi yang sama.

Kami ingin memindahkan ini ke sistem yang lebih sederhana dan VCS tunggal, dan sedang mempertimbangkan beberapa opsi, termasuk: git submodules, google Repo, dan monorepos. VCS final belum didefinisikan (kecuali untuk opsi yang mengamanatkannya), dan dapat berupa svn, git atau bahkan sesuatu yang lain jika itu akan lebih sesuai dengan situasi kita.

Kami mencoba membuat daftar plus dan minus dari setiap solusi dan salah satu masalah utama yang kami miliki saat ini dengan monorepos adalah tampaknya tidak mudah, atau bahkan mungkin untuk berbagi hanya beberapa modul ke entitas eksternal. Kami ingin orang-orang itu dapat melakukan checkout dan bekerja secara normal pada modul-modul itu, tetapi tidak dapat mengakses kode atau riwayat dari sisa repo. Itu bukan sesuatu yang sering kita lakukan atau secara luas saat ini, tetapi kita mungkin di masa depan, dan kita tidak ingin ini menjadi mimpi buruk karena kita membuat keputusan yang buruk di sini.

Apakah sistem manajemen privilege semacam itu ada dalam sistem VCS?
Atau adakah cara untuk mengurangi masalah ini?

Leherenn
sumber
Apakah Anda akan mempertimbangkan Server atau Layanan Team Foundation? Ini memiliki dukungan untuk Git dan mencakup beberapa alur kerja yang bagus dan Kemampuan Integrasi Berkelanjutan
hanzolo
Yang mana implementasi monorepo yang Anda pertimbangkan?
Dan Cornilescu

Jawaban:

3

Dari uraian Anda, saya pikir Anda memiliki beberapa opsi di sini:

  1. Gunakan submodules git - dengan layanan seperti GitHub (atau apa pun), Anda dapat mengelola izin per-proyek dan memisahkan proses penyebaran Anda. Namun, saya pernah mendengar bahwa submodules git akhirnya menjadi sangat menyakitkan dari waktu ke waktu. Skrip otomatis untuk menginisialisasi ulang / mengunduh ulang submitula git Anda dapat membantu di sini.
  2. Hancurkan repo Anda menjadi layanan independen. Hal ini memungkinkan Anda untuk berkembang secara bersamaan, tetapi juga menimbulkan rasa sakit yang besar karena Anda harus mulai berpikir tentang penemuan layanan, penyebaran berbagai layanan, lingkungan pengembangan, integrasi / penyebaran berkelanjutan, dan semua kesenangan kecil lainnya yang datang dari mengelola suatu arsitektur microservice.
  3. Gunakan sistem manajemen paket formal seperti pip untuk Python, npm untuk Node.js, Maven untuk Java, dll. Sebarkan potongan-potongan kode yang Anda butuhkan ke dalam repositori dan konsumsilah dalam repo utama Anda seperlunya, yang seharusnya memberi Anda kemampuan untuk versi mereka. Bergantung pada sambungan antara modul Anda dan repo utama Anda, Anda mungkin tidak dapat benar-benar mengekstraksi, menjalankan, atau menguji modul tingkat rendah secara mandiri. Namun, jika Anda bisa , ini adalah cara yang cukup baik untuk menjalankan gel itu dengan baik dengan beberapa repositori sambil tetap dapat mengintegrasikan paket-paket Anda saat membangun dengan menginstalnya dari repositori jarak jauh.

Sayangnya tidak satu pun dari opsi ini yang sempurna, tetapi semuanya valid tergantung pada kondisi basis kode Anda. Deskripsi Anda kedengarannya seperti opsi 3 mungkin paling berhasil di sini.

Way Spurr-Chen
sumber