Kami menggunakan GitHub Flow dalam proyek kami dan sebagian besar waktu, kami membuka cabang fitur baru dari master , melakukan beberapa pekerjaan di sana, membuka PR, meninjau kode dan menggabungkan kembali menjadi master .
Namun, pekerjaan saya saat ini tergantung pada masalah lain yang sedang dikerjakan feature-branch-A
. Apakah halal untuk membuat cabang saya dari cabang lain itu atau apakah itu bertentangan dengan semangat GitHub Flow?
Alternatifnya adalah dengan mendasarkan cabang saya pada master dan menggabungkan perubahan dari feature-branch-A
(sering).
Opsi mana yang lebih disukai dalam aliran GitHub?
Saya pikir ini sepenuhnya ok jika Anda membuat fitur di fitur lain.
Tetapi jangan sering melakukannya. Saya melihat satu pengembang yang membuat ini dan dua atau minggu dia membuang 10 PR untuk penggabungan. Itu sangat melelahkan bagi anggota lain untuk ditinjau dan sulit untuk digabung juga. Cobalah jangan membuat pohon di git. Itu membantu membagi dua untuk menemukan kesalahan.
sumber
Hal utama yang ingin ditangani oleh git-flow adalah kemampuan untuk berpikir tentang peran cabang tertentu, dan dari mana cabang itu berasal dan bergabung.
Idealnya, semua cabang bergabung kembali ke codeline tempat mereka bergabung. Ini biasanya merupakan gabungan dari garis utama (dalam git-flow inilah
dev
). Cabang fitur cabang dan bergabung dari dev, lepaskan cabang cabang dan bergabung dari dev (dengan gabungan tambahan kemaster
). Cabang hot fixes dan bergabung dari master (dengan tambahan itu menggabungkan kembali ke dev).Setiap codeline bercabang dari dan bergabung kembali ke induknya. Codeline dapat menarik kode dari codeline lain kapan saja jika perlu.
Jika cabang dari cabang fitur adalah "Saya ingin menjelajahi cara memperbaiki masalah di cabang fitur" - baik-baik saja. Ini cabang dari cabang fitur, melakukan beberapa kode dan bergabung kembali ke cabang fitur (atau dibuang).
Apa yang ingin Anda hindari adalah sesuatu yang terlihat seperti:
Alasannya adalah bahwa awal dan akhir tidak cocok - itu membuat sedikit lebih sulit untuk memahami apa ini dan itu. Bukan tidak mungkin, tetapi hanya membutuhkan sedikit waktu bagi seseorang untuk memahami perannya.
Namun, jika ini adalah fitur baru yang bergantung pada kode yang belum ditemukan di dev, alurnya harus:
Perhatikan bahwa ini dimulai dengan cabang dari dev dan diakhiri dengan gabungan ke dev.
Semua yang dikatakan, mungkin hal terbaik untuk dilakukan adalah menghindari penggabungan dari satu fitur ke fitur lainnya. Cabang fitur tersebut, lakukan persiapan apa pun yang diperlukan ... dan tunggu.
Ini memberikan set cabang dan kode yang paling stabil.
Sesuatu yang perlu dipertimbangkan untuk pekerjaan di masa depan adalah memiliki fitur untuk menerbitkan antarmuka yang diperlukan untuk interoperabilitas dengan fitur lain - bahkan jika kode implementasi tidak lengkap. Ini akan digabungkan ke dev, dan kemudian fitur yang diperlukan dapat bekerja dari antarmuka tersebut seperti halnya fitur masa depan. Ini kemungkinan akan memungkinkan fitur masa depan untuk maju lebih lanjut (pengkodean terhadap antarmuka, pengujian terhadap stubb yang mengimplementasikan antarmuka) daripada jika harus menunggu fitur yang diperlukan untuk bergabung ke dev.
sumber
required-feature
bergabung.Cabang fitur biasanya dianggap kurang stabil daripada trunk (develop / master), sehingga Anda mungkin mengalami perubahan yang lebih mendasar daripada biasanya jika Anda mendasarkan pekerjaan Anda dari satu.
Juga, sementara biasanya disukai jika cabang telah didorong, tidak jarang untuk rebase cabang fitur ke cabang induknya, untuk mendapatkan sejarah yang lebih bagus, tetapi itu akan lebih rumit jika ada cabang tambahan yang menggantung, sehingga Anda Pada dasarnya menciptakan batasan baru untuk pemilik cabang induk, serta potensi sakit kepala untuk Anda sendiri.
Karena itu, tidak ada aturan ketat yang melarangnya. Ini hanya pola dan praktik terbaik.
Edit: bagian pertanyaan Anda tidak terjawab. Menggabungkan cabang fitur menjadi milik Anda sendiri, yang didasarkan pada master tidak benar-benar menghindari masalah yang disebutkan di atas, dan mungkin benar-benar membuat sejarah yang lebih berbelit-belit.
Jadi jika saya berada di posisi Anda dan saya dapat menunda pekerjaan sampai fitur a selesai, atau melakukan hal lain terlebih dahulu, saya akan melakukannya.
sumber