Apa cara yang disarankan untuk memisahkan pengembangan saat ini dari pengembangan pemeliharaan dalam perangkat lunak kontrol versi?

10

Saya memiliki beberapa aplikasi perangkat lunak yang dikelola menggunakan Git. Saya baru saja merilis versi baru 2.x yang saya rencanakan untuk mempertahankannya dalam jangka panjang (kebanyakan perbaikan bug). Sementara itu, saya ingin mulai bekerja pada versi 3.x. Apa cara yang disarankan untuk mengelola ini? Haruskah saya membuat cabang untuk versi 2.x dan memiliki pengembangan 3.x pada master? atau sebaliknya?

laurent
sumber
Memiliki cabang yang berbeda untuk pengembangan dan stabil.
Oded
Jadi apa yang biasanya masuk ke cabang master? (sampai sekarang saya selalu melakukan semuanya di sana)
laurent
Anda perlu memutuskan apa yang ingin Anda mastermaksudkan. Itu hanya label.
Oded

Jawaban:

13

Cara yang sangat menarik dalam melakukan berbagai hal dijelaskan di sini: Model percabangan Git yang sukses

Saya menemukan itu sangat menarik, tetapi belum benar-benar menggunakannya.

Baiklah, seperti yang diminta (sangat) ringkasan pendek dari apa yang dikatakan artikel:

  • Cabang Master hanya mewakili setiap tonggak selesai (yaitu Versi 1.0, 1.1, 1.2 dll.)
  • Pengembangan dilakukan di cabang itu sendiri (mudah disebut "berkembang", siapa sangka?). Cabang pengembangan digabung kembali ke cabang Master, setiap kali versi fitur lengkap dilakukan.
  • Percabangan dari pengembangan adalah cabang fitur. Ini mewakili fitur tunggal untuk rilis berikutnya (atau masa depan). Mereka bergabung kembali dengan cabang pengembangan.
  • Cabang lain yang berasal dari pengembangan adalah cabang "rilis". Ini adalah cabang yang mewakili versi rilis yang hampir lengkap di mana hanya detail kecil yang harus dibersihkan. Ini bergabung dengan cabang pengembangan dan akhirnya dengan cabang Master
  • Cabang "Perbaikan terbaru" cabang dari cabang master jika Anda menemukan bug yang parah di salah satu rilis Anda (yaitu "Jika penggunaan memasukkan kode konami program kami akan memformat ulang harddisk utama ..."). Ini cabang dari rilis kereta dan, ketika perbaikan selesai digabung kembali ke cabang master DAN cabang devlopment.

Itulah kekurangannya, tetapi percayalah, bahwa artikel tersebut menggambarkannya dengan lebih detail, dan dengan grafik visualisasi yang membantu, lebih mudah untuk dipahami.

Sorcy
sumber
2
Anda harus memasukkan beberapa penjelasan tentang saran Anda dalam jawaban, lebih disukai orang tidak harus mengikuti tautan untuk mendapatkan gambaran keseluruhan model. Tautan memiliki kebiasaan buruk untuk menjadi awol, dan jawaban harus berdiri sendiri ...
yannis
+1 Cukup banyak apa yang kita gunakan di tempat kerja, dan itu benar-benar berhasil.
Ed James
1
Saya percaya ini umumnya disebut sebagai "batang stabil" atau "cabang fitur" model.
sleske
"Cabang Master hanya mewakili setiap tonggak selesai (yaitu Versi 1.0, 1.1, 1.2 dll.)" Saya tidak ingin cabang master dengan versi 1.0, 1.1, 1.2, 2.0, 1.3, 2.1, 1.4, 2.2, 3.0, 3.0, 1.5 di perintah itu, itu akan sangat membingungkan. Dugaan saya adalah bahwa ada asumsi implisit bahwa ada paling banyak satu aliran di mana rilis dilakukan, itu tidak terjadi dalam praktik saya. Ada pengadopsi awal dan orang yang menginginkan sesuatu yang lebih stabil.
Pemrogram
Nah, dalam jangka panjang cabang tidak lebih dari label untuk memudahkan Anda untuk mengetahui apa yang terjadi di sana. Jadi jika Anda tidak suka dengan cara ini, tidak ada yang menghentikan Anda dari menggunakan cabang Master hanya untuk rilis stabil walikota dan memiliki Cabang "Percobaan" (atau apa pun yang Anda ingin menyebutnya) untuk rilis inkremental yang lebih kecil.
Sorcy
5

Prinsip saya adalah bahwa semakin pendek jangka cabang, semakin dalam struktur cabang dan semakin spesifik namanya. Jangka waktu yang lebih panjang dari cabang itu, lebih dangkal akan berada dalam struktur cabang dan lebih generik namanya.

Jadi, Anda mempertahankan master Anda untuk versi jangka panjang (3.X) dan Anda terus memberi nama cabang ini dengan nama generik (master, trunk, devel, ...) dan bukan yang spesifik (nama kode rilis atau nomor rilis yang lebih buruk lagi) yang terlalu banyak bergantung pada praktiknya pada keputusan penentuan nilai terlambat)

Tidak terlalu penting dalam sistem seperti git yang memiliki ruang nama datar untuk cabang dan di mana cabang setara. Itu lebih penting dengan sistem seperti clearcase yang memiliki namespace hirarkis untuk cabang (nama lengkap cabang V4 akhirnya menjadi utama / v1 / v2 / v3 / v4 ...)

Pemrogram
sumber
1 kecuali saya tidak tahu apa arti mendalam dan dangkal dalam konteks ini, mungkin Anda bisa sedikit memperluas istilah itu?
Michael Durrant
Pikirkan ranting membuat pohon. Mereka mungkin keluar dari bagasi atau cabang lain. Dangkal berarti bahwa jumlah langkah percabangan antara cabang dan batangnya kecil, dalam berarti jumlah langkah percabangan itu penting. Yang kecil dan penting sebagian besar adalah relatif, tetapi saya telah melihat skema yang mana setiap rilis baru selangkah lebih maju dari yang sebelumnya dari bagasi. Jika Anda menggunakan namespace datar, itu tidak terlalu buruk. Jika namespace hirarkis (clearcase, CVS, RCS, Perforce dapat digunakan sedemikian rupa juga), Anda mendapatkan nama yang lebih lama dan lebih lama.
Pemrogram