Kami adalah toko ISV kecil dan kami biasanya mengirimkan versi baru produk kami setiap bulan. Kami menggunakan Subversion sebagai repositori kode kami dan Visual Studio 2010 sebagai IDE kami. Saya sadar banyak orang menganjurkan Mercurial dan sistem kontrol sumber terdistribusi lainnya, tetapi pada titik ini saya tidak melihat bagaimana kita bisa mendapat manfaat dari ini, tetapi saya mungkin salah.
Masalah utama kami adalah bagaimana menjaga agar cabang dan trunk utama tetap sinkron.
Inilah cara kami melakukan sesuatu hari ini:
- Lepaskan versi baru (secara otomatis membuat tag di Subversion)
- Terus bekerja di bagasi utama yang akan dirilis bulan depan
Dan siklus berulang setiap bulan dan bekerja dengan sempurna. Masalah muncul ketika rilis layanan yang mendesak perlu dirilis. Kami tidak dapat melepaskannya dari batang utama (2) karena sedang dalam pengembangan berat dan tidak cukup stabil untuk dilepaskan segera.
Dalam hal ini kami melakukan hal berikut:
- Buat cabang dari tag yang kami buat pada langkah (1)
- Perbaikan bug
- Uji dan lepaskan
- Dorong perubahan kembali ke bagasi utama (jika ada)
Masalah terbesar kami adalah menggabungkan keduanya (cabang dengan main). Dalam sebagian besar kasus, kami tidak dapat mengandalkan penggabungan otomatis karena misalnya:
- banyak perubahan telah dilakukan pada trunk utama
- menggabungkan file kompleks (seperti file Visual Studio XML dll.) tidak berfungsi dengan baik
- pengembang / tim lain membuat perubahan yang tidak Anda pahami dan Anda tidak bisa hanya menggabungkannya
Jadi apa yang Anda pikirkan adalah praktik terbaik untuk menyinkronkan kedua versi yang berbeda ini (cabang dan utama). Apa yang kamu kerjakan?
sumber
Jawaban:
Saya pikir pendekatan Anda untuk percabangan dan penggabungan adalah OK, tetapi jika masalah utama adalah bahwa basis kode sangat tidak stabil, itulah yang Anda butuhkan untuk fokus dan meminimalkan.
Hal utama yang harus dipastikan adalah bahwa basis kode memiliki pemisahan keprihatinan yang baik . Ketergantungan antara berbagai komponen perlu diisolasi dan dikurangi. Ini harus menyelesaikan sebagian besar masalah Anda. Juga mengikuti praktik-praktik seperti prinsip tanggung jawab tunggal akan membantu.
Jika perubahan arsitektur besar perlu terjadi, itu harus terjadi di cabang sendiri, dan kemudian bergabung kembali ke utama setelah sepenuhnya diuji dan 'stabil' (sesuai alasan). Ini mungkin menyakitkan dan menantang tetapi juga harus jarang. Jika Anda memiliki praktik pengujian yang baik maka risiko diminimalkan.
Mungkin juga membantu mengubah ke sistem kontrol versi terdistribusi. Ini akan memberi Anda bagasi yang stabil, dengan berbagai fitur digabungkan dari cabang yang berbeda saat siap. Anda masih akan mengalami kesulitan menggabungkan jika kode terlalu saling tergantung, tetapi Anda akan memiliki kontrol lebih.
Melihat ini dari perspektif lain, pertimbangkan juga peningkatan komunikasi di antara tim Anda. Jalankan pertemuan rutin gaya tangkas teratur. Pertimbangkan di mana anggota tim duduk dan bagaimana hal itu dapat membantu. Jika penggabungan yang kompleks perlu dilakukan, itu mungkin bukan hal yang buruk - gunakan pendekatan pemrograman berpasangan yang akan memberikan pemahaman kepada kedua belah pihak.
sumber
Saya cenderung melihatnya dari arah sebaliknya:
Tentu saja, alur kerja ini jauh lebih cocok untuk sesuatu yang bukan SVN, karena percabangan dan penggabungan yang baik adalah sesuatu yang cukup menyakitkan di SVN, terlepas dari alur kerja Anda. Dalam pengalaman saya, menggabungkan di SVN hampir selalu harus dilakukan secara manual, karena itu tidak berfungsi, dan tidak ada jalan nyata di sekitarnya.
sumber
Akhir-akhir ini, saya menganjurkan filosofi "cabang dan penggabungan" sebagai hasil terakhir. Saya pikir itu adalah kebenaran yang disayangkan bahwa berurusan dengan penggabungan kode dari cabang bukanlah masalah teknis, tetapi itu adalah tugas yang sulit secara kognitif: Saya pikir itu hanya karena otak manusia tidak melacak detail yang cukup untuk membuatnya mudah. Selain itu, saya belum melihat percabangan dan penggabungan benar-benar bekerja dalam praktik. Setelah kode bercabang, pengalaman memberi tahu saya bahwa itu bukan masalah untuk menggabungkannya lagi.
sumber
Pendekatan rilis-on-utama yang disiplin berfungsi dengan baik.
Percabangan SVN tidak dirancang agar fleksibel. Saya menyarankan masalah pertama Anda terletak pada SVN; pindah dari itu akan membuka opsi baru.
sumber