Maaf tentang postingan yang panjang ini, tapi saya pikir itu sepadan.
Saya baru saja mulai dengan toko .NET kecil yang beroperasi sedikit berbeda dengan tempat-tempat lain yang telah saya kerjakan. Tidak seperti posisi saya sebelumnya, perangkat lunak yang ditulis di sini ditargetkan pada banyak pelanggan dan tidak setiap pelanggan mendapatkan rilis perangkat lunak terbaru pada saat yang sama. Dengan demikian, tidak ada "versi produksi saat ini." Ketika seorang pelanggan mendapatkan pembaruan, mereka juga mendapatkan semua fitur yang ditambahkan ke perangkat lunak sejak pembaruan terakhir mereka, yang mungkin sudah lama sekali. Perangkat lunak ini sangat dapat dikonfigurasi dan fitur dapat dihidupkan dan dimatikan: apa yang disebut "fitur toggle." Siklus rilis sangat ketat di sini, pada kenyataannya mereka tidak sesuai jadwal: ketika fitur selesai perangkat lunak digunakan untuk pelanggan yang relevan.
Tim yang tahun lalu baru saja pindah dari Visual Source Safe ke Team Foundation Server. Masalahnya adalah mereka masih menggunakan TFS seolah-olah itu VSS dan memberlakukan kunci Checkout pada cabang kode tunggal. Setiap kali perbaikan bug dimasukkan ke lapangan (bahkan untuk satu pelanggan) mereka hanya membangun apa pun yang ada di TFS, menguji bug itu diperbaiki dan menyebar ke pelanggan! (Saya sendiri berasal dari latar belakang perangkat lunak farmasi dan perangkat medis, ini sulit dipercaya!). Hasilnya adalah bahwa kode dev setengah dipanggang dimasukkan ke dalam produksi tanpa diuji. Bug selalu menyelinap ke rilis build, tetapi seringkali pelanggan yang baru saja membangun tidak akan melihat bug ini jika mereka tidak menggunakan fitur bug tersebut. Direktur tahu ini adalah masalah karena perusahaan mulai menumbuhkan semua tiba-tiba dengan beberapa klien besar datang dan lebih kecil.
Saya telah diminta untuk melihat opsi kontrol sumber untuk menghilangkan penyebaran kode buggy atau yang belum selesai tetapi untuk tidak mengorbankan sifat yang agak tidak sinkron dari rilis tim. Saya telah menggunakan VSS, TFS, SVN dan Bazaar dalam karir saya, tetapi TFS adalah tempat di mana sebagian besar pengalaman saya.
Sebelumnya, sebagian besar tim yang pernah bekerja sama dengan saya menggunakan dua atau tiga cabang solusi Dev-Test-Prod, di mana selama sebulan pengembang bekerja langsung di Dev dan kemudian perubahan digabung menjadi Uji kemudian Prod, atau dipromosikan "bila sudah selesai" daripada pada siklus tetap. Bangun otomatis digunakan, menggunakan Cruise Control atau Team Build. Dalam pekerjaan saya sebelumnya Bazaar digunakan duduk di atas SVN: devs bekerja di cabang fitur mereka sendiri kemudian mendorong perubahan mereka ke SVN (yang diikat ke TeamCity). Ini bagus karena mudah untuk mengisolasi perubahan dan membaginya dengan cabang orang lain.
Dengan kedua model ini ada cabang dev pusat dan prod (dan kadang-kadang menguji) di mana kode didorong (dan label digunakan untuk menandai build di prod dari mana rilis dibuat ... dan ini dibuat menjadi cabang untuk perbaikan bug untuk melepaskan dan bergabung kembali ke dev). Ini tidak benar-benar sesuai dengan cara bekerja di sini, namun: tidak ada urutan kapan berbagai fitur akan dirilis, mereka didorong ketika mereka selesai.
Dengan persyaratan ini, pendekatan "integrasi berkelanjutan" seperti yang saya lihat rusak. Untuk mendapatkan fitur baru dengan integrasi berkelanjutan, ia harus didorong melalui dev-test-prod dan yang akan menangkap setiap pekerjaan yang belum selesai di dev.
Saya berpikir bahwa untuk mengatasi ini kita harus turun model bercabang fitur besar dengan tidak ada cabang dev-test-prod, bukan sumber harus ada sebagai serangkaian cabang fitur yang ketika pekerjaan pengembangan selesai dikunci, diuji, diperbaiki, dikunci , diuji dan kemudian dirilis. Cabang fitur lainnya dapat mengambil perubahan dari cabang lain saat mereka membutuhkan / inginkan, sehingga akhirnya semua perubahan dapat diserap ke semua orang. Ini sangat sesuai dengan model Bazaar murni dari apa yang saya alami di pekerjaan terakhir saya.
Sefleksibel ini kedengarannya aneh rasanya tidak memiliki dev batang atau cabang prod di suatu tempat, dan saya khawatir tentang cabang forking tidak pernah mengintegrasikan kembali, atau perubahan kecil terlambat dibuat yang tidak pernah bisa ditarik ke cabang lain dan pengembang mengeluh tentang gabungkan bencana ...
Apa pendapat orang tentang ini?
Pertanyaan terakhir kedua: Saya agak bingung tentang definisi yang tepat dari kontrol sumber terdistribusi: beberapa orang tampaknya menyarankan itu hanya tentang tidak memiliki repositori pusat seperti TFS atau SVN, beberapa orang mengatakan ini tentang terputusnya hubungan (SVN adalah 90% terputus dan TFS memiliki mode offline yang berfungsi sempurna) dan yang lain mengatakan ini adalah tentang Branching Fitur dan kemudahan penggabungan antara cabang tanpa hubungan orangtua-anak (TFS juga memiliki penggabungan tanpa dasar!). Mungkin ini pertanyaan kedua!