Tim kami baru saja beralih dari FogBugz & Kiln / Mercurial ke Jira & Stash / Git. Kami menggunakan model Git Flow untuk bercabang, menambahkan cabang subtask dari cabang fitur (terkait dengan subtitle Jira dari fitur Jira). Kami menggunakan Stash untuk menetapkan resensi ketika kami membuat permintaan tarik untuk bergabung kembali ke cabang induk (biasanya berkembang tetapi untuk subtugas kembali ke cabang fitur).
Masalah yang kami temukan adalah bahwa bahkan dengan perencanaan dan pemecahan kasus fitur terbaik, ketika beberapa pengembang bekerja bersama pada fitur yang sama, katakan pada front-end dan back-end, jika mereka bekerja pada kode saling tergantung yang di cabang terpisah satu pengembang akhirnya memblokir yang lain.
Kami telah mencoba menarik di antara cabang satu sama lain saat kami berkembang. Kami juga telah mencoba membuat cabang integrasi lokal yang dapat ditarik oleh setiap pengembang dari beberapa cabang untuk menguji integrasi ketika mereka berkembang. Akhirnya, dan ini tampaknya bekerja mungkin yang terbaik bagi kami sejauh ini, meskipun dengan sedikit lebih banyak overhead, kami telah mencoba membuat cabang integrasi dari cabang fitur langsung dari kelelawar. Ketika cabang subtugas (di luar cabang fitur) siap untuk permintaan tarik dan tinjauan kode, kami juga secara manual menggabungkan set perubahan itu ke cabang integrasi fitur ini. Kemudian semua pengembang yang tertarik dapat menarik dari cabang integrasi tersebut ke cabang subtugas lain yang bergantung. Ini mencegah siapa pun dari menunggu cabang mana pun yang mereka andalkan untuk lulus tinjauan kode.
Saya tahu ini bukan masalah Git - ini berkaitan dengan bekerja pada kode yang saling tergantung di banyak cabang, dicampur dengan proses dan budaya kerja kami sendiri. Jika kami tidak memiliki kebijakan peninjauan kode yang ketat untuk dikembangkan (cabang integrasi yang benar) maka pengembang 1 dapat bergabung untuk mengembangkan dari pengembang 2. Komplikasi lain adalah kita juga diharuskan untuk melakukan beberapa pengujian pendahuluan sebagai bagian dari proses peninjauan kode sebelum menyerahkan fitur ke QA. Ini berarti bahwa bahkan jika pengembang front-end 1 menarik langsung dari cabang pengembang back-end 2 saat mereka pergi, jika pengembang back-end 2 selesai dan permintaan tarikannya duduk dalam tinjauan kode selama seminggu, maka pengembang front-end 2 secara teknis tidak dapat membuat permintaan tarik / tinjauan kode karena pengkodeannya tidak bisa menguji karena pengembang back-end 2 '
Intinya adalah kita menemukan diri kita dalam pendekatan yang jauh lebih serial daripada paralel dalam contoh ini, tergantung pada rute mana kita pergi, dan ingin menemukan proses untuk digunakan untuk menghindari ini.
Hal terakhir yang akan saya sebutkan adalah kami menyadari dengan membagikan kode lintas cabang yang belum ditinjau kode dan diselesaikan namun pada dasarnya kami menggunakan kode beta orang lain. Sampai batas tertentu saya tidak berpikir kita bisa menghindarinya dan mau menerimanya sampai tingkat tertentu.