Saya telah melihat banyak saran tentang model percabangan git dan pendapat paling umum tampaknya bahwa membuat perubahan langsung pada cabang master adalah ide yang buruk.
Salah satu rekan kerja kami cukup senang membuat perubahan langsung di cabang utama, dan meskipun beberapa percakapan, mereka sepertinya tidak akan mengubah ini.
Pada titik waktu ini, saya tidak dapat meyakinkan rekan kerja yang merupakan praktik buruk untuk bekerja secara langsung pada master, tetapi saya ingin memahami hal-hal yang akan bertentangan dengan cara kerjanya, untuk mengetahui kapan saya perlu mengunjungi kembali masalah ini.
version-control
git
svn
branching
linuxunil
sumber
sumber
Jawaban:
Ada beberapa masalah ketika komit langsung didorong untuk dikuasai
sumber
Jelaskan kepadanya bahwa fitur-fitur baru memerlukan cabang pengembangan mereka sendiri yang dapat digunakan untuk lingkungan pengujian sebelum didorong ke produksi.
Jika tidak, Anda dalam kondisi abadi dengan fitur setengah jadi. Anda tidak dapat menggunakan fitur yang setengah jadi untuk produksi, jadi jika Anda bekerja langsung pada cabang master, semua orang harus menunggu Anda untuk menyelesaikan fitur Anda sebelum perubahan orang lain dapat diproduksi, termasuk perbaikan bug.
Menggunakan cabang independen untuk fitur berarti bahwa setiap fitur baru dapat diuji dan digunakan secara terpisah dari yang lain.
sumber
Master harus berpotensi dirilis. Periode. Seharusnya tidak ada setengah jadi karya master (kecuali dinonaktifkan dengan bendera fitur)
Dengan mengatakan bahwa saya telah melihat beberapa tim mempersulit aliran mereka.
Tidak menggunakan PR saat mengintegrasikan ke master adalah kesalahan karena pengembang tidak akan memiliki kekuatan untuk memilih ketika integrasi terjadi.
Cabang pengembangan tunggal membawa nilai yang sangat kecil. Biasanya itu hanya mempersulit. Banyak cabang fitur membawa banyak nilai.
Membuat cabang untuk setiap lingkungan (dev, test, prod) adalah sebuah kesalahan. Ini di luar ruang lingkup untuk git dan harus ditangani oleh pipa rilis. Bangunan yang sama persis harus digunakan untuk semua lingkungan yang tidak mungkin jika ada cabang untuk setiap lingkungan.
Jika fitur sangat besar tidak dapat dilakukan dalam satu atau dua hari semua pekerjaan ke cabang fitur harus di cabang terpisah dan terintegrasi dengan PR.
sumber
sumber
Pertama, saya ingin menunjukkan bahwa dalam git, setiap
pull
operasi secara harfiah bercabang, dan setiappush
gabungan. Padamaster
mesin pengembang adalah cabang yang sepenuhnya terpisah darimaster
pada repo pusat yang Anda bagikan, dengan kedudukan yang sama dari perspektif teknis. Kadang-kadang saya akan mengganti nama versi lokal sayaupstream
atau sesuatu jika itu sesuai dengan tujuan saya lebih baik.Saya menunjukkan hal ini karena banyak organisasi berpikir mereka menggunakan cabang lebih efektif daripada rekan Anda, ketika mereka benar-benar melakukan sedikit lebih banyak daripada membuat nama tambahan untuk cabang di sepanjang jalan, itu tidak akan disimpan dalam sejarah. Jika kolega Anda sedang melakukan fitur dalam satu komit atom, sama mudahnya untuk mundur sebagai komit gabungan dari cabang fitur. Sebagian besar cabang fitur harus berumur pendek dan sering digabungkan.
Yang sedang berkata, kelemahan utama dari gaya kerjanya ada dua. Pertama, sangat sulit untuk berkolaborasi pada fitur yang belum selesai. Namun, tidak akan sulit untuk membuat cabang pada saat-saat ketika kolaborasi diperlukan.
Kedua, membuat review sebelum penggabungan menjadi sangat sulit. Pada titik ini, Anda sebenarnya tidak perlu meyakinkannya. Anda dapat mengadopsi alat seperti github, gerrit, atau gitlab, dan memerlukan ulasan kode permintaan tarik dan lulus tes otomatis untuk semua penggabungan. Jika Anda tidak melakukan hal seperti ini, terus terang Anda tidak menggunakan git secara maksimal, dan tidak heran kolega Anda tidak melihat potensi itu.
sumber
pull
akan membuat cabang baru atau bagaimanapush
operasi penggabungan. Sebaliknya,pull
adalah secara harfiah sebuahfetch
diikuti olehmerge
!master
sebagai cabang yang berbedaorigin master
. Secara teknis, mereka adalah cabang yang berbeda pada dua remote yang berbeda, masing-masing dengan sejarah mereka sendiri.pull
: Sebelum: dua cabang berpotensi menunjuk komit yang berbeda - Setelah: dua cabang menunjuk komit setara - Tidak ada cabang yang dibuat, oleh karena itu saya tidak akan menyebutnya "operasi percabangan". Jika salah satu dari dua perintah, saya akan menyebutnyapush
, karena berpotensi membuat cabang baru di remote. Apa yang tidak dilakukannya, adalah penggabungan.Jawaban lain telah menyebutkan berbagai keuntungan (fitur terisolasi, kode shippable selalu pada master, dll) untuk bekerja TIDAK pada master secara langsung.
Bagi saya, Anda tampaknya memiliki masalah yang berbeda. Jelas Anda tidak memiliki proses pengembangan, yang disetujui atau digunakan oleh semua pengembang Anda (atau pengembang Anda yang bersangkutan benar-benar mengabaikan proses tersebut).
Apakah Anda memiliki cabang fitur, yang digabung menjadi master atau apakah Anda memiliki cabang rilis yang berbeda juga atau apakah Anda menggunakan proses yang sama sekali berbeda?
"Jangan gunakan cabang master" tidak cukup.
sumber
Ini membuat saya percaya ada lebih banyak masalah. Bekerja pada master atau tidak sebagian besar merupakan bagian dari filosofi yang lebih besar tentang bagaimana, apa dan kapan Anda merilis produk.
Jadi bersamaan dengan "Anda seharusnya tidak pernah bekerja pada master", apakah Anda memiliki tes fitur, apakah Anda menguji satu sama lain bekerja apakah Anda meninjau satu sama lain kode. Tes penerimaan dan integrasi.
Jika Anda tidak memiliki hal-hal di atas dan Anda hanya melakukannya untuk "melakukan git", Anda bisa juga bekerja pada master.
sumber
Tidak ada "praktik buruk" di sekitar bekerja langsung di cabang. Tetapi Anda harus memutuskan apa yang paling mendukung proses Anda:
Pertanyaan 1: Haruskah master Anda mewakili status rilis perangkat lunak Anda saat ini? Maka Anda harus memperkenalkan cabang pengembangan global dan menggabungkan pengembangan di akhir pengembangan rilis.
Pertanyaan 2: Apakah Anda ingin memiliki proses peninjauan kode? Maka Anda harus memiliki "cabang fitur" yang akan digabungkan menjadi master (atau mengembangkan, jika Anda memilikinya) melalui permintaan tarik.
Pertanyaan 3: Apakah perlu membagikan status kode perantara ke pengembang lain yang belum dipublikasikan dalam produksi (atau pengujian)? Itu sebabnya lebih dari satu pengembang mengembangkan fitur. Maka Anda harus memperkenalkan "cabang fitur".
sumber