Di tim kami, kami menggunakan Git sebagai kontrol sumber kami. Kami memiliki beberapa area kode yang hampir independen tetapi memiliki beberapa tumpang tindih. Akhir-akhir ini kami telah membahas alur kerja dan pendekatan untuk menggunakan kontrol sumber. Salah satu keluhan yang muncul ketika saya mempromosikan menggunakan alur kerja cabang fitur adalah bahwa orang sering mengalami konflik gabungan rumit yang mereka salah atasi. Yang rumit, maksud saya "tidak jelas bagaimana cara menyelesaikannya". Sehubungan dengan ini, alur kerja lainnya sedang lebih aktif digunakan, seperti alur kerja berbasis "tarik rebase".
Sebagai penganjur pendekatan cabang fitur, saya tidak benar-benar mendapatkan keluhan. Ya, Anda harus tetap memperbarui fitur cabang lokal Anda dari master atau di mana pun, tetapi hanya itulah masalah sebenarnya yang saya lihat. Saya berpikir bahwa jika penggabungan Anda selalu rumit dan mungkin memiliki efek sekunder, maka itu lebih merupakan masalah kerja tim daripada masalah Git.
Apakah saya benar dalam memikirkan ini? Apakah konflik menggabungkan rumit tanda sesuatu yang baik atau buruk?
sumber
Jawaban:
Bukan tidak mungkin masalahnya adalah kode Anda. Jika basis kode Anda memiliki banyak hubungan antar modul, maka setiap perubahan akan memiliki sulur di mana-mana, dan setiap pengembang berinteraksi dengan kode orang lain, itu akan menjadi mimpi buruk.
Saya cenderung berpikir Anda akan memperhatikan hal ini terlebih dahulu, tetapi mungkin Anda sudah terbiasa sehingga Anda tidak bisa melihatnya lagi.
sumber
Saya terbiasa dengan alur kerja "fetch-rebase-push". Yang sebenarnya adalah alur kerja pertama, paling primitif, yang dijelaskan dalam tutorial Anda. Berikut adalah keuntungannya:
Sekarang, tentang konflik gabungan yang rumit. Saya tidak mengerti bagaimana seseorang bisa mengalami penggabungan yang sering dan rumit. Komplikasi muncul dari tidak rebasing / memetik ceri untuk waktu yang lama, bekerja pada fitur yang sendirian selama sebulan.
Saya pribadi lebih suka berurusan dengan konflik yang sering dan mudah digabung (sebenarnya rebase), daripada jarang, horor gabungan yang mencakup semua.
sumber
Penggabungan dan rebase harus menyebabkan konflik yang sama persis, untuk konflik inheren yang harus diselesaikan manusia (yaitu dua pengembang mengubah baris kode yang sama). Untuk konflik lainnya, gabungan sebenarnya cenderung lebih bersih, karena Anda tidak mengubah SHA-1 dari commit di semua tempat. Saya tidak yakin bagaimana Anda bisa masuk ke keadaan di mana penggabungan menyebabkan lebih banyak konflik daripada rebases, tapi itu tentu saja pertanda bahwa alur kerja beberapa orang kacau, dan mereka mungkin membutuhkan lebih banyak pelatihan tentang cara kerja git. Apakah mereka menghapus komitmen gabungan orang lain ketika mereka melakukan rebounds lokal mereka, atau sesuatu seperti itu?
Manfaat dan kelemahan dari metode pull-rebase adalah sangat mirip dengan alur kerja terpusat yang banyak digunakan orang. Anda tidak harus mengerti percabangan untuk menggunakannya.
Bagaimanapun, sangat layak untuk melakukan alur kerja cabang fitur hanya secara lokal, jika Anda tidak dapat membuat orang lain masuk ke dalamnya.
sumber
Proyek yang sedang saya kerjakan memiliki masalah seperti ini dari waktu ke waktu dan sepertinya merupakan hasil dari beberapa faktor:
Saya tertarik dengan potensi Semantic Merge untuk membantu dengan beberapa masalah itu, tetapi jelas itu hanya berguna jika Anda bekerja dalam bahasa yang dapat diuraikan dan saya belum mengalami tantangan signifikan ketika saya Saya menggunakannya, jadi saya tidak dapat menjamin efektivitasnya.
sumber
Kecuali jika pengembang memodifikasi komitmen historis (bukan gabungan murni), konflik dalam model tipe alur kerja fitur adalah tanda basis kode yang digabungkan secara ketat (/ basis kode baru) atau penugasan fitur yang tumpang tindih.
sumber
Anda memiliki cabang (master) utama dan semua orang bekerja di cabang fitur mereka.
Bekerja di cabang fitur dapat memakan waktu mulai dari beberapa jam hingga beberapa bulan.
Sesekali seseorang akan membalikkan penggabungan perubahan mereka kembali ke cabang utama. Pimpinan tim Anda perlu memastikan bahwa hanya satu orang yang melakukan penggabungan terbalik pada suatu waktu. Setelah ini selesai, Anda perlu meneruskan penggabungan dari cabang Utama ke cabang fitur Anda. Setelah semua orang melakukan penggabungan ke depan, orang lain dapat diizinkan untuk membalikkan penggabungan menjadi cabang utama. Kalau tidak, terlalu banyak perubahan akan dibatalkan penggabungan dan Anda akan memiliki banyak konflik gabungan pada penggabungan ke depan Anda.
Hanya untuk memperjelas terminologi, dengan "membalikkan penggabungan" yang saya maksud penggabungan dari cabang fitur ke cabang utama, dan dengan "penggabungan ke depan" maksud saya menggabungkan dari cabang utama ke cabang fitur. Berdasarkan apa yang saya alami sebelumnya, Anda cenderung melihat lebih banyak konflik penggabungan pada penggabungan terbalik, sebagai kebalikan dari penggabungan ke depan.
sumber
Dua hal yang mungkin membantu: Satu, hindari alat apa pun yang melakukan perubahan sendiri. Dua pengembang yang menggunakan pengaturan tab berbeda adalah resep untuk bencana. Dua, buat perubahan di lokasi yang berbeda. Anda mendapatkan masalah misalnya jika tiga pengembang menambahkan kode di akhir file yang sama - jauh lebih baik jika mereka menambahkan kode di tempat yang berbeda.
sumber