Dalam organisasi besar, menggunakan metodologi air terjun biasanya menghasilkan struktur percabangan yang sangat kompleks (alias spagetti cabang ).
Strategi percabangan apa yang dapat digunakan untuk transisi dari realitas percabangan yang kompleks ke model cabang tunggal seperti pengembangan berbasis batang?
Memperbarui:
Untuk memperjelas, pertanyaannya adalah tentang migrasi / transisi itu sendiri , bukan tentang metodologi sebelum dan sesudah, yang cukup jelas.
Tidak bisa benar-benar "di EOB hari ini kita masih air terjun dengan trilyun cabang, tetapi besok hal pertama yang kita akan beralih ke berbasis-cabang, CI cabang tunggal".
continuous-integration
branch
waterfall
Dan Cornilescu
sumber
sumber
Jawaban:
Karena Anda menyebutkan air terjun, saya mengerti bahwa banyak cabang yang Anda maksudkan adalah cabang fitur daripada cabang pemeliharaan.
Dalam pengaturan ini, saya juga berasumsi bahwa cabang-cabang ini dibuat sesuai dengan rencana air terjun yang mencoba meminimalkan konflik. Ini menyiratkan bahwa tujuan pengembangan adalah untuk menghasilkan beberapa produk berbeda. Saat menggunakan model pengembangan cabang tunggal, penting untuk juga mengerjakan satu produk. Jika beberapa produk secara bersamaan dikembangkan dalam model pengembangan cabang tunggal, itu secara efektif "menempelkan" bersama-sama versi produk tesis ini, sehingga kita mungkin memiliki dalam versi a dari repositori produk sehat X dan produk kereta Y , sedangkan dalam versi b produk X memiliki regresi dan perbaikan bug Y , tetapi kami tidak memiliki versi di mana X danY sehat. Situasi seperti itu akan memaksa kita untuk menganggap X dan Y sebagai dikembangkan dalam repositori yang berbeda, yang merupakan petunjuk bahwa mereka seharusnya.
Oleh karena itu, langkah pertama harus melakukan pemisahan repositori :
Aturlah repositori sehingga mudah untuk membaginya menjadi beberapa repositori kecil. Misalnya, mengatur ulang repositori saat ini sehingga setiap direktori tingkat atas sesuai dengan repositori yang ingin Anda buat di masa depan. Dengan melakukannya, Anda dapat terus menggunakan disiplin cabang-spageti yang dikenal semua orang.
Ketika langkah 1 selesai, perbaiki disiplin cabang-spageti dengan mewajibkan cabang tunggal mana pun hanya dapat menyentuh file dalam satu direktori tingkat atas.
Saat setiap cabang mematuhi langkah 2, lakukan pemisahan. Pengembang dapat dengan mudah mengonversi perubahan yang tertunda untuk menambal repositori tunggal, hanya dengan menghapus tingkat pertama dari lintasan.
Sekarang perpecahan telah dilakukan, Anda dapat mulai bekerja pada disiplin cabang itu sendiri.
Perkenalkan teknik pemrograman yang membantu pengembangan cabang yang berumur pendek. Cabang yang berumur pendek adalah aspek penting dari semua metodologi cabang tunggal. Salah satu tujuan mereka adalah untuk mengurangi waktu yang dihabiskan untuk menggabungkan dan men-debug cabang yang berumur panjang. Teknik populer adalah pengenalan "fitur-flags" di mana "pabrik" menggunakan flag konfigurasi untuk menghasilkan versi historis dari suatu objek atau versi yang baru, yang pada awalnya sebagian dikembangkan, dari objek itu.
Pada saat ini, Anda memiliki banyak repositori dengan hanya beberapa cabang di masing-masing, dan Anda dapat memutar tombol “kita secara global mengadopsi disiplin pengembangan berbasis-batang”, tanpa melihat gunung cabang-spageti yang asli runtuh di bagasi.
Perpecahan sebenarnya dari repositori mungkin opsional, tetapi Anda kemudian harus mengadopsi kebijakan yang dengan jelas menggambarkan ruang lingkup yang diperbolehkan dari setiap tambalan yang dikirimkan (untuk membatasi risiko konflik ketika menggabungkan perubahan di cabang utama). Mengurangi overhead yang terikat pada konflik adalah salah satu tujuan dari metodologi model cabang tunggal, jadi saya menganggap ini relevan dalam konteks Anda.
sumber
Saat bermigrasi dari sesuatu ke sesuatu yang lain, hanya ada dua hal yang perlu Anda tentukan:
Bagian pertama adalah, sayangnya, sering diabaikan atau cara terlalu samar. Anda tidak bisa hanya mengatakan bahwa apa yang Anda miliki berantakan dan Anda ingin mengaturnya. Apa artinya itu? Semua orang akan memiliki interpretasi yang berbeda (aka: setiap dev berpikir bahwa nya atau nya cara melakukan sesuatu adalah yang terbaik).
Kemungkinannya adalah, semua cabang yang Anda miliki melayani atau telah melayani suatu tujuan. Tanpa proses target yang jelas, orang akan terus melakukan apa yang sesuai untuk mereka yang paling cocok untuk mereka (dan memang demikian).
Misalnya, target Anda harus didefinisikan sejelas Vincent Driessen mendefinisikan "model percabangan Git yang sukses" . Jika Anda melihat model ini, itu sangat tepat: Dikatakan di mana kode stabil seharusnya, dan di mana fitur tidak stabil harus dikembangkan. Ia juga mengatakan bagaimana - dan kapan - untuk bercabang, memperbarui dan menggabungkan kembali. Anda tahu untuk apa masing-masing cabang, dan apa yang harus dilakukan dengan mereka. Kami menggunakan variasi dari apa yang dikemukakan oleh Vincent dan variasi kami didefinisikan dalam wiki kami.
Poin penting adalah membuat semua tim memahami dan menyepakati target. Mungkin bermanfaat untuk mengingatkan orang-orang bahwa Anda tidak mencari model percabangan favorit pribadi mereka, tetapi sebuah model yang dapat disetujui dan digunakan semua anggota tim dengan mudah.
Setelah Anda memiliki target, Anda akan dapat menjabarkan rencana migrasi Anda. Rencana itu bisa sepanjang atau sesingkat yang Anda inginkan. Saya telah melihat model percabangan seperti itu diberlakukan dalam semalam; di tempat lain, itu dilakukan lebih dari 2 atau 3 sprint. Bagi saya tidak masalah, asalkan kita membaik.
Anda bisa mulai dengan cabang "terbesar" atau lebih penting. Misalnya: "mulai sekarang, master harus selalu dalam kondisi untuk ditempatkan di prod dan cabang dev harus selalu dikompilasi" (atau apa pun aturan Anda). Kemudian, tegakkan versi (rilis) cabang. Setelah itu, tegakkan cabang fitur. Setelah itu, memaksakan pembekuan kode pada cabang versi, jika itu masuk akal.
DevOps adalah tentang komunikasi, keterbukaan dan efisiensi. Konsep-konsep ini harus diingat dan dikomunikasikan selama proses berlangsung.
Saya menyarankan untuk mengundang beberapa orang di luar tim pengembangan ke pertemuan proses sebagai pengamat. Ops atau manajemen menengah mungkin memiliki satu atau dua hal untuk dikatakan tentang model Anda. Kebutuhan pengembang harus diprioritaskan, tetapi jika model percabangan tidak mungkin disejajarkan dengan cara pengelolaannya, Anda akan lebih tahu sekarang dan tidak dalam satu atau dua bulan.
Jika Anda memiliki tim yang sangat besar, cobalah untuk menyertakan semua orang. Dengan tim yang sangat besar, Anda akan berakhir dengan dua atau tiga pertemuan. Jadi undanglah pemimpin tim di ruangan itu, tetapi miliki webcast yang tersedia dan beri tahu semua orang tentang hal itu. Jika ada yang punya saran atau masalah, mereka akan dapat menyuarakannya kepada pemimpin tim mereka dan jika itu valid, itu akan dibahas pada pertemuan kedua atau ketiga.
sumber
Sebenarnya sangat sederhana untuk mengubah repositori hydra multi-cabang menjadi model bercabang tunggal.
Pertama, Anda ingin memulai dengan cabang yang memiliki sedikit perbedaan antara dirinya dan master atau trunk. Periksa umur dan relevansinya. Jika masih relevan, mulailah menggabungkannya dan menyelesaikan konflik. Jika tidak lagi relevan, maka hapus.
Lanjutkan proses ini sampai Anda berhasil menggabungkan semua cabang Anda, menyelesaikan semua konflik, dan Anda hanya memiliki satu cabang yang tersisa.
Anda dapat mengikuti garis besar sederhana ini untuk memulai:
temp_master
temp_master
cabang Anda .temp_master
.temp_master
menjadi master / trunk dan hidup dengan model cabang tunggal baru Anda.sumber
Untuk organisasi besar dengan siklus sprint 4 minggu, Git-Flow adalah pendekatan yang lebih disukai karena Anda mendapatkan manfaat dari cabang fitur. Cabang siap produksi master selalu dapat digunakan. Juga, cabang master tetap bersih dari komitmen yang tidak diinginkan dengan mengikuti dua siklus komit (dari fitur ke
Develop
danDevelop
cabang untuk menguasai).Selain itu, percabangan juga ditentukan oleh frekuensi rilis produksi. Untuk penyebaran yang sering ke produksi, lebih baik memiliki cabang Fitur atau model Terpusat. Dalam hal ini overhead pengelolaan cabang dialihkan ke pengujian yang kuat di lingkungan yang lebih rendah untuk menjaga stabilitas produksi.
sumber