Katakanlah beberapa cabang sedang dikembangkan, A
dan B
, juga cabang "perbaikan bug" tambahan C
.
Sekarang C
sudah "selesai" dan digabung menjadi master. A
dan B
masih dalam pengembangan dan tidak akan diperbaiki sebelum (mungkin) cabang perbaikan bug lainnya digabung menjadi master.
Apakah ide yang baik untuk bergabung C
sesegera mungkin di cabang fitur baru? Sehingga fitur-fitur baru tetap sedekat master
mungkin? Atau lebih baik membiarkan fitur baru dikembangkan di "dunia" mereka sendiri hanya bergabung menjadi master setelah selesai?
Bagaimanapun, akan ada konflik, jadi waktu perlu dihabiskan untuk memperbaikinya.
version-control
branching
merging
paul23
sumber
sumber
Jawaban:
Semakin lama sebuah cabang hidup, semakin ia dapat menyimpang dari cabang utama dan semakin berantakan dan semakin rumit hasil gabungannya ketika akhirnya selesai. Sepuluh konflik kecil lebih mudah diselesaikan daripada 1 konflik besar, dan sebenarnya dapat mencegah pengembang menggandakan atau membuang-buang upaya. Mengingat bahwa, Anda harus menggabungkan
master
ke dalamA
danB
teratur; sekali sehari adalah rekomendasi yang cukup umum, meskipun jika Anda memiliki banyak aktivitas di cabang Anda, Anda mungkin ingin bergabung beberapa kali sehari.Selain membuat resolusi konflik lebih mudah, Anda secara spesifik menyebutkan
C
cabang bugfix. Sebagai pengembang, saya ingin cabang saya memiliki semua perbaikan bug terbaru, untuk memastikan saya tidak mengulangi perilaku yang mengarah ke bug, atau menulis tes berdasarkan data yang salah.Jika Anda tahu akan ada konflik, Anda mungkin ingin mengadopsi strategi percabangan yang berbeda. Simpan beberapa perubahan pada file yang sama di cabang yang sama bila memungkinkan, dan Anda mengurangi atau menghilangkan jumlah konflik. Refactor cerita sehingga mereka sepenuhnya independen sebanyak mungkin, dan pengerjaan ulang cabang untuk mungkin mencakup beberapa cerita (cabang, fitur, dan cerita tidak selalu dapat dipertukarkan).
sumber
Dengan asumsi niat Anda adalah untuk akhirnya menggabungkan A, B kembali menjadi master dan mempertahankan basis kode tunggal, tidak pernah merupakan ide yang baik untuk menyimpang dari master terlalu jauh. Menyimpang dari master terlalu lama, terutama ketika perbaikan bug dan pengembangan lainnya bergabung untuk menguasai sebagai A, B sedang dikembangkan, tentu akan menyebabkan konflik.
Saya akan mempertimbangkan strategi yang mirip dengan mengikuti
sumber
Biasanya seringkali lebih baik daripada yang besar.
Permintaan tarik yang lebih kecil, lebih sering, hampir selalu lebih baik.
Saya sudah mulai menggunakan flag konfigurasi terutama sehingga saya bisa melakukan permintaan tarikan yang lebih kecil lebih awal sehingga saya bisa, pada gilirannya, menggabungkan kode lebih mudah, tetapi membiarkan fitur dinonaktifkan. Semakin kecil permintaan tarik, semakin mudah untuk meninjau kode, bahkan jika ada lebih banyak permintaan tarik total. Kebanyakan manusia dalam bentuk apa pun tidak akan dapat melakukan tinjauan yang berarti atas permintaan tarik besar-besaran. Ini terlalu sulit pada RAM mental seseorang untuk memahami semua implikasi yang mungkin dari perubahan kode besar-besaran.
Ada overhead tambahan dalam membuat flag konfigurasi, jadi tidak sepadan dengan fitur yang lebih kecil. Namun permintaan tarik Anda akan kecil.
Namun, mungkin ada situasi di mana fitur tersebut harus dirilis sekaligus. Bahkan mungkin lebih baik melakukan permintaan tarik yang lebih kecil ke cabang lain yang dibuat untuk tujuan itu.
Sebagian besar kolega saya mengerang ketika seseorang membuat permintaan penarikan besar-besaran, dan sebagian besar, memang demikian.
Juga perhatikan bahwa kadang-kadang saya perlu memilih cherry memilih cabang yang terpisah. Jika apa yang perlu dipetik cherry dapat dimasukkan ke dalam satu komit itu membuatnya lebih mudah untuk memindahkannya ke cabang lain. Ini adalah kasus di mana sebenarnya memiliki sedikit melakukan lebih baik, tetapi itu bukan proses standar jika ceri Anda memilih-milih.
sumber
Dalam Refactoring oleh Martin Fowler, saran yang dia berikan adalah jangan pernah membiarkan dahan bercabang dari master lebih dari sehari. IIRC, Anda harus melakukan perubahan kecil, uji untuk memastikan bahwa Anda tidak merusak apa pun, dan kemudian menggabungkannya kembali.
sumber
A
danB
tahan perombakan besar baru yang radikal terhadap cara kerja aplikasi, mereka tidak "selesai" dalam sebulan. Namun mereka juga tidak berguna sebelum mereka selesai ...Opsi lain untuk perubahan yang benar-benar berumur panjang yang mungkin selesai tetapi tidak siap untuk digunakan adalah menempatkan mereka di belakang flag fitur sehingga mereka dapat digabungkan untuk dikuasai tetapi tidak memiliki risiko merusak apa pun. Kemudian ketika mereka siap digunakan bendera fitur dapat dihapus.
sumber