Apa keuntungan menggunakan percabangan sebagai pengembang solo?

117

Pertama, saya menyadari bahwa banyak pertanyaan telah diajukan tentang VCS sebagai pengembang tunggal, tetapi seringkali terlalu luas. Ini hanya menyangkut percabangan, dan masih telah ditandai sebagai duplikat ... duplikat yang seharusnya, sekali lagi, ditandai sebagai duplikat lain dari pertanyaan lain yang terlalu luas dan tidak berkaitan dengan percabangan secara khusus. Begitulah pertanyaan saya unik.

Apa keuntungan, jika ada, menggunakan percabangan sebagai pengembang solo? Saya sering melihatnya merekomendasikan bahkan dalam konteks solo-dev, tetapi sejauh yang saya bisa lihat, selain menggunakan trunk 'master' untuk pengembangan, dan bercabang untuk bekerja, kode siap-rilis, saya tidak melihat bagaimana Saya bisa memanfaatkan kekuatan percabangan (misalnya, untuk memisah-misah fitur baru) tanpa terlalu menyulitkan seluruh proses pengembangan.

flatterino
sumber
14
Maaf, saya akui saya tidak terlalu berpengalaman dalam model StackExchange, tetapi apakah saya harus memahami bahwa 'praktik terbaik', atau pertanyaan lain yang tidak memiliki jawaban tunggal, deterministik tidak disukai, atau bahkan tidak diizinkan untuk dibahas? Saya melihat banyak contoh berdasarkan pendapat-pertanyaan seharusnya berlaku bahkan di bagian 'terkait' dari pertanyaan ini, seperti softwareengineering.stackexchange.com/questions/286928 atau softwareengineering.stackexchange.com/questions/132730
flatterino
8
Sementara saya setuju dengan Man bahwa pertanyaan ini bukan duplikat yang tepat (perbedaan ruang lingkupnya signifikan), korban penipuan dari pertanyaan sasaran dupe yang ditautkan terkait kebetulan memiliki jawaban yang mencakup topik yang Anda minati - apakah ada sesuatu yang jawaban tidak mencakup yang ingin Anda dengarkan lebih lanjut?
jrh
4
Pemikiran saya adalah bahwa sementara pertanyaan itu tidak membahas topik itu, ia melakukannya secara tangensial (pengguna mengajukan 3 pertanyaan berbeda terkait dengan berbagai aspek percabangan), dan pada kenyataannya pertanyaan itu sendiri ditutup karena 'terlalu luas' karena alasan itu. Saya berharap untuk memulai diskusi tentang fitur VCS yang sangat spesifik ini dalam konteks yang sama spesifiknya. Untuk menjawab pertanyaan Anda, sejauh ini, beberapa aspek telah disebutkan di sini (dalam balasan dan komentar pada balasan ini) yang tidak disebutkan dalam balasan untuk pertanyaan yang Anda referensikan. Terima kasih atas kontribusi Anda.
flatterino
3
Dan, sekali lagi ... pertanyaan yang Anda tautkan bertanya "Sebagai pengembang tunggal, fitur Git atau GitHub apa yang dapat saya manfaatkan yang akan bermanfaat bagi saya saat ini?". Kemungkinan jawaban untuk pertanyaan itu, antara lain, bisa "bercabang". Itu tidak akan menjadi jawaban untuk pertanyaan saya. Juga, itu ditutup terlalu luas untuk alasan yang sama. Silakan baca penjelasan di atas pertanyaan saya. Aku sudah mengedit posting saya 3 kali sekarang ...
flatterino

Jawaban:

199

Keuntungannya kebanyakan sama dengan kelompok pengembang. Dengan menggunakan cabang master yang selalu siap dirilis, dan cabang fitur untuk mengembangkan fitur baru, Anda selalu dapat melepaskan master. Temukan bug penting saat mengerjakan fitur? Beralih cabang, perbaiki, lepaskan, beralih kembali dan terus berkembang.

Atau mungkin ini adalah proyek hobi dan Anda hanya suka sedikit bisa bekerja pada fitur ini dan sedikit itu, karena suasana hati menyerang Anda. Anda pada dasarnya meniru tim banyak orang dengan mengiris waktu.

Percabangan implisit yang dilakukan DVCS pada klon berarti bahwa cabang formal pada repositori otoritatif lebih sedikit tentang mengoordinasikan orang dan lebih banyak tentang mengoordinasikan arah pembangunan, dan bahkan satu orang dapat melakukan lebih dari itu.

Sebastian Redl
sumber
1
Persis. Grup juga tidak harus menggunakan cabang — saya pernah bekerja untuk tim yang tidak. Memang, itu sebagian besar karena tidak terbiasa dengan git, dan semua tim belajar untuk menggunakan cabang sebagai masalah dengan tidak menggunakannya muncul, tetapi masalah-masalah itu akan berlaku untuk pengembang solo juga.
KRyan
42

Pembangunan jangka panjang

Bercabang untuk tim satu orang akan berguna untuk fitur pengembangan jangka panjang yang jika tidak cocok dengan siklus rilis Anda.

Anda bisa mengambil cabang untuk perubahan rentang multi-bulan dan masih bisa mendorong perbaikan bug apa pun sehari-hari atau perubahan dari cabang utama Anda secara berkala.

Ini memiliki keunggulan dibandingkan 'sakelar' dalam satu cabang karena cabang utama Anda selalu dalam kondisi yang dapat digunakan dan Anda dijamin bahwa tidak ada dalam fitur yang berjalan lama yang berdampak pada kode lain yang telah diuji sebelumnya.

Fitur eksperimental

Cabang juga bisa berguna untuk fitur yang mungkin ingin Anda prototipe, tetapi mungkin tidak pernah membuatnya menjadi kode yang Anda gunakan. Melengkapi ini pada cabang yang akhirnya saya buang berarti Anda tidak pernah mencemari basis kode utama Anda secara tidak perlu.

Padi
sumber
16

Saya menggunakannya untuk pemeliharaan situs web kritis. Saya adalah satu-satunya pengembang namun saya memiliki cabang master, mengembangkan dan menerbitkan.

Proses kerja saya untuk pengaturan situs terlihat seperti ini:

  1. Buat cabang utama yang bisa diterapkan. Lakukan komit awal.

  2. Checkout mengembangkan cabang. Jangan lakukan apa pun, kembangkan fungsi sebagai buffer uji untuk bergabung ke master.

  3. Cabang masalah pemeriksaan. Buat kode untuk masalah Anda, setelah selesai, tarik untuk dikembangkan, lihat apakah ada masalah, gabungkan konflik dll ... perbaiki itu.

Ketika masalah yang cukup digabungkan ke dalam pengembangan untuk rilis dan pengembangan telah diuji untuk stabilitas, tarik berkembang menjadi master.

   Master
     |
   Develop  - E
   / |  \  \
 A   B   C  D

Dengan begitu Anda mendapatkan koleksi pengujian lengkap dalam pengembangan, di mana Anda dapat menguji stabilitas, masalah, dll ... tanpa harus mengambil risiko menyakiti Guru dan harus membatalkan komitmen jika itu berbahaya.

Juga, dengan menggunakan masing-masing cabang untuk melakukan, Anda dapat "meninggalkan" pekerjaan yang sudah Anda lakukan, memulai sesuatu yang baru untuk memperbaiki masalah yang lebih mendesak dan menyelesaikannya lebih awal.

Dalam kehidupan nyata saya biasanya memiliki satu cabang masalah, dan menarik yang berkembang dan kemudian menjadi master. Kadang-kadang itu membosankan, tetapi setiap dua bulan sekali setidaknya saya harus meninggalkan pekerjaan hanya dengan topi karena seseorang mempunyai ide bahwa saya harus membuat RightNow ™ dan dengan cara itu saya dapat dengan cepat beralih kembali ke keadaan dasar, menjadikannya hal yang penting. dan kemudian setelah itu melanjutkan keberadaan saya. Terutama dengan proyek-proyek besar yang membutuhkan waktu beberapa minggu, ini adalah hal yang luar biasa sehingga saya dapat dengan cepat berganti cabang.

Pertimbangkan skenario ini: Anda selalu bekerja di cabang utama dan Anda memiliki AwesomeCodeThing ™ dalam karya-karya yang membuat cabang Master Anda dalam operasi jantung terbuka dan YugeBug ™ muncul yang perlu diperbaiki segera jika tidak, ribuan pengguna akan mengeluh kepada Anda tentang BigProblems ™
The satu-satunya cara untuk dengan cepat menyelesaikan masalah Anda dalam skenario seperti itu,

  1. periksa komitmen Anda sebelumnya,
  2. lihat kapan komit stabil terakhir Anda (mengutuk adalah opsional)
  3. putar kembali ke komit itu
  4. melakukan perbaikan, dorong perbaikan untuk produksi
  5. selesaikan semua konflik dan masalah yang kini Anda coba kembalikan ke status AwesomeCodeThing ™
  6. menyerah, menangis dan mulai bekerja. (opsional)

Jika Anda menggunakan cabang:

  1. Master checkout
  2. buat cabang UrgentFix ™ dan perbaiki hal-hal
  3. tarik UrgentFix ™ ke master
  4. mendorong produksi
  5. Gabungkan master ke dalam pengembangan
  6. Gabung berkembang menjadi AwesomeCodeThing ™
  7. dapatkan bir dan terus bekerja.
Tschallacka
sumber
13
Mendapatkan bir sebelum melanjutkan adalah non-opsional.
JamesB
4
@ James B. Dapatkan bir sebelum memulai adalah non-opsional :)
Chris Cirefice
4

Cabang membuat lebih mudah untuk bekerja pada banyak fitur sekaligus, yang bisa sangat membantu ketika prioritas berubah selama proyek.

Katakanlah Anda memutuskan suatu fitur yang lebih penting sekarang. Mungkin Anda perlu menambal bug penting dalam sistem live. Anda dapat bekerja dengan klien pada beberapa fitur selama periode waktu yang panjang dan mungkin ingin mendemonstrasikan kemajuan masing-masing fitur secara terpisah. Mungkin Anda baru saja membaca tentang eksploitasi nol hari yang buruk dan ingin membahasnya sebelum kata klien membacanya.

Jika Anda menggunakan cabang untuk setiap fitur / perbaikan terbaru, biasanya lebih mudah, lebih bersih, dan lebih cepat untuk mengisolasi dan menggunakan modifikasi ini daripada menggunakan cabang tunggal untuk semuanya. Ini berlaku baik Anda adalah pengembang tunggal atau bagian dari tim.

Adapun proses yang sebenarnya, saya menemukan aliran git bekerja dengan baik. Lembar contekan git flow Daniel Kummer adalah sumber yang bagus, perlu dilihat bahkan jika Anda tidak menggunakan git.

Andrew Calder
sumber
2

Seperti yang disebutkan oleh poster lain, keuntungannya hampir sama dengan bekerja dalam tim: Kemampuan untuk secara mandiri mengembangkan dan menguji fitur, mempertahankan cabang utama yang terpisah untuk perbaikan terbaru / penyebaran produksi, percobaan.

Bagi saya pribadi, saya biasanya cenderung bekerja di master jika saya tahu area yang saya kerjakan dengan baik, itu hanya menambah overhead ke cabang karena saya hanya akan menggabungkan mereka.

Namun, jika saya memiliki salah ragu-ragu tentang perubahan saya membuat saya akan cabang dan hanya PR / menggabungkan sekali cabang berperilaku seperti yang diharapkan dan umumnya sepenuhnya diuji. Dengan begitu, jika saya menemukan masalah yang memutar balik adalah tindakan terbaik, itu adalah satu komit daripada seluruh seri (saya tidak pernah bisa mengingat sintaks untuk mengembalikan serangkaian komit tapi satu saja mudah).

RmxPatrick
sumber