Dalam arti umum, untuk proyek jangka panjang yang mungkin memiliki beberapa rilis selama siklus hidup produk dan membutuhkan dukungan produk sebelumnya, apa cara terbaik untuk menangani versi produk dan percabangan basis kode?
Dalam arti yang lebih spesifik, asumsikan bahwa kontrol versi terdistribusi yang tepat sudah ada (yaitu git) dan bahwa tim berukuran kecil hingga besar dan pengembang dapat mengerjakan beberapa proyek sekaligus. Masalah utama yang sedang dihadapi adalah bahwa ada kewajiban kontrak untuk mendukung versi lama seperti yang ada pada saat itu yang berarti bahwa pengembangan baru tidak dapat menambal kode lama (produk Microsoft Office bisa menjadi contoh dari ini, Anda hanya mendapatkan tambalan untuk tahun fitur yang Anda miliki).
Akibatnya, versi produk saat ini adalah sentuhan yang berbelit-belit karena setiap produk utama memiliki banyak ketergantungan, masing-masing dengan versi mereka sendiri yang dapat berubah di antara rilis tahunan. Demikian juga, sementara setiap produk memiliki repositori sendiri, sebagian besar pekerjaan tidak dilakukan pada batang sumber utama melainkan pada cabang untuk tahun itu rilis produk dengan cabang baru yang dibuat ketika produk dilepaskan sehingga produk tersebut dapat didukung. Ini pada gilirannya berarti bahwa mendapatkan basis kode produk bukanlah hal yang mudah seperti yang mungkin dipikirkan orang ketika menggunakan kontrol versi.
Jawaban:
Seberapa banyak (dan apa jenis) struktur yang Anda butuhkan sangat tergantung pada apa yang ingin Anda lakukan. Cari tahu apa yang Anda tidak bisa hidup tanpanya, apa yang ingin Anda miliki, dan apa yang tidak Anda pedulikan.
Contoh keputusan yang bagus mungkin:
Hal-hal yang kita tidak bisa hidup tanpanya:
Hal-hal yang ingin kami miliki:
Kita bisa hidup tanpa:
Jika tujuan di atas adalah tujuan Anda, Anda dapat mengadopsi proses seperti ini:
Proses ini tidak akan menjawab semua pertanyaan Anda - khususnya, Anda akan memerlukan proses untuk memutuskan perbaikan apa yang dapat dilakukan untuk cabang rilis, dan untuk memastikan bahwa bug tidak diperbaiki pada cabang rilis terlebih dahulu (perbaikan seperti itu harus selalu diuji di bagasi jika memungkinkan). Tapi itu akan memberi Anda kerangka kerja untuk membuat keputusan seperti itu.
sumber
"Jangka panjang" adalah indikator yang Anda perlukan untuk versi, tetapi itu tidak melibatkan strategi versi dan cabang yang spesifik. Pertanyaan yang lebih menarik adalah berapa banyak lini produk atau lini versi utama yang ingin Anda dukung (yang tergantung pada kontrak dengan pelanggan Anda). Anda setidaknya membutuhkan satu cabang untuk setiap lini produk / lini versi utama yang Anda miliki kontrak perawatannya.
Di sisi lain, itu tergantung pada ukuran tim Anda. Jika Anda memiliki tim pengembangan besar, dengan orang yang berbeda bekerja pada fitur yang berbeda secara paralel, Anda jelas akan membutuhkan lebih banyak cabang fitur daripada jika Anda memiliki tim yang terdiri dari satu atau dua orang. Jika Anda bekerja dengan tim yang lebih besar, Anda harus mempertimbangkan untuk menggunakan kontrol versi terdistribusi, yang membuat paralel bekerja pada cabang yang berbeda (dan mengintegrasikannya nanti ke dalam bagasi) jauh lebih efisien.
sumber
Git adalah alat kontrol versi - ia mengelola versi file. Apa yang Anda kejar adalah alat manajemen konfigurasi. Ada beberapa avalible ini, tetapi sebagian besar pada $$$ tinggi dari orang-orang seperti IBM.
Alat kontrol versi menyediakan percabangan dan penandaan, yang memungkinkan manajemen konfigurasi rudementy tanpa dukungan alat tambahan, karenanya pengembang menay tidak memahami perbedaannya. Kebutuhan Anda mungkin melampaui apa yang dirancang untuk dilakukan GIT.
Saya tidak tahu, tapi saya yakin itu akan ada, tambahan alat CM untuk Git.
sumber
Pertanyaan ini tampaknya sangat mirip dengan pertanyaan lain yang saya jawab baru-baru ini.
Singkatnya, ini lebih mirip masalah desain produk dan distribusi lebih dari masalah kontrol versi / percabangan. Tentu saja, mudah bagi saya untuk mengatakan itu dan lebih sulit bagi Anda untuk memperbaikinya jika Anda sudah berada jauh di dalam masalah.
Tanpa mengetahui secara lebih rinci masalah spesifik Anda. Namun secara umum, jika saya memiliki beberapa versi produk berdasarkan pada basis kode yang memiliki banyak kode bersama antara produk, jika layak saya akan melihat untuk refactoring produk dengan cara yang akan membuat mereka lebih modular, dan untuk memastikan bahwa modul itu sendiri tidak memerlukan percabangan kode tambahan. Saya juga akan melihat model penempatan saya, untuk melihat apakah ada cara yang lebih baik untuk mendukung pelanggan saya sambil tetap mempertahankan banyak basis kode. Jika diperlukan kustomisasi pelanggan khusus, granularitas modul yang lebih besar mungkin diperlukan untuk mengurangi jumlah kode duplikat dalam sistem.
Ini bukan tugas yang mudah, tetapi dapat diperbaiki secara bertahap jika Anda mengelola pekerjaan dengan baik, dan jika Anda dapat menjadwalkan pekerjaan sehingga Anda tidak perlu "meningkatkan" semuanya sekaligus.
sumber