Bagaimana saya harus mengontrol versi proyek saya di GitHub

13

Saya mencoba untuk menghabiskan waktu sebanyak yang saya bisa di GitHub saat ini (bahkan saya adalah satu-satunya orang di tim di tempat kerja) yang benar-benar merasakan bagaimana rasanya untuk aplikasi perusahaan dunia nyata.

Satu pertanyaan saya adalah mengendalikan versi . Katakanlah kita memulai sebuah proyek. Kemudian, anggota tim menciptakan beberapa cabang dan berkembang di sana. Ketika kami siap untuk produksi, kami menggabungkan semua cabang dengan mastercabang. Pada akhirnya, kami menampilkan versi 1.0.

Sekarang versi 1.0itu langsung dan kami memiliki beberapa masalah yang diajukan untuk versi perangkat lunak itu. Kami ingin mulai mengembangkan versi 1.1untuk memperbaiki masalah-masalah yang telah kami perkenalkan dengan mempercepat proyek.

Sekarang, pertanyaannya adalah ini:

Bagaimana seharusnya kita mengontrol versi di sini?

Haruskah kita membuat cabang baru untuk v1.0dan menyimpan versi 1.0perangkat lunak di sana dan mengembangkan pada beberapa cabang (atau tidak), menggabungkannya dengan master, ditayangkan dengan versi 1.1?

Apakah ada konvensi di luar sana untuk situasi semacam itu?

tugberk
sumber

Jawaban:

19

Saya telah menemukan (dan mulai mengadopsi) model cabang berikut :

Gambar dari nvie.com

(gambar dari artikel)

Ada banyak praktik hebat dan aturan ketat yang dijelaskan dalam artikel itu, saya sangat merekomendasikannya.

Tempat menarik:

  • Cabang master adalah tempat Anda menandai versi Anda. Tidak ada perkembangan yang terjadi di sini. Jika ada bug yang digunakan dalam produksi, Anda memperbaiki bug pada cabang perbaikan terbaru, bergabung kembali dan beri tag versi baru.
  • Pengembangan terjadi pada cabang devel dan feature. Secara pribadi, saya melakukan perbaikan bug pada cabang devel dan fitur pada cabang fitur.
  • Ketika perangkat lunak mulai mencapai rilis, saya bercabang untuk melepaskan cabang. Cabang rilis adalah tempat saya melakukan sentuhan terakhir. Bump nomor versi, ubah metadata dll. Dan perbaikan bug minor. Setelah selesai, saya menggabungkannya untuk menguasai, memberi tag, dan menyebutnya versi.
  • Dua cabang utama: master adalah "cabang suci"; KEPALA nya selalu kode produksi terbaru, dan berkembang adalah cabang malam; KEPALA selalu mencerminkan penambahan kode terbaru (tetapi mungkin tidak stabil).

Dalam kasus spesifik Anda, langkah-langkahnya tergantung pada seberapa tergesa-gesa versi itu. Jika fitur yang ditinggalkan, saya akan kembali ke rilis pengembangan dan melakukan semuanya lagi. Jika bug dalam versi yang digunakan, saya akan bercabang ke cabang perbaikan terbaru, memperbaiki bug, bergabung kembali dan beri tag v1.1. Jika keduanya, saya akan memperbaiki bug pertama, kemudian tambahkan fitur kedua seperti yang dijelaskan.

Tamás Szelei
sumber
Sangat informatif dan terperinci. Dan juga latihan yang sempurna. Ini juga masuk akal. Memiliki master untuk prod hanya membuat perawatannya mudah. Saya sangat tidak terbiasa dengan menandai cabang (atau melakukan?) Bisakah Anda memberi saya beberapa detail tentang itu? bagaimana kita bisa melakukan sesuai model di atas?
tugberk
1
Di git, target dari penandaan adalah komit. Ini berarti bahwa Anda mengatakan: "ini komit ini, dan saya menyebutnya 'v1.3' mulai sekarang". Dalam praktik itu berarti Anda beralih ke cabang master, gabungkan cabang devel, komit, dan beri tag (sekarang stabil). Kemudian Anda dapat membuat daftar semua tag, kembali ke kode tersebut jika Anda perlu melihat apa yang diproduksi dalam rilis sebelumnya. Ada sedikit lebih banyak untuk tag dari itu (yang berguna untuk pengembangan terdistribusi skala besar seperti kernel linux). Jika Anda tertarik, saya sarankan buku progit .
Tamás Szelei
ProGit adalah salah satu buku yang pasti akan saya baca dari awal. Untuk saat ini saya hanya membaca bagian-bagian yang saya minati untuk menyelesaikan pekerjaan. Sejauh ini, kami telah mengembangkan cabang master dan saya pikir saya harus mempertahankannya. Tetapi saya akan membuka cabang lain yang dipanggil productiondan menggunakannya sebagai mastercabang sesuai dengan model di atas.
tugberk
ketika saya mencoba model ini, satu hal yang saya perjuangkan adalah: ada beberapa cabang pendukung seperti yang dibahas pada artikel yang diberikan, fitur dan rilis cabang. mungkin ada beberapa cabang di masa depan. Misalnya, FeedbackForm adalah salah satu cabang di masa depan dan ContactForm adalah yang lain. Ini ok untuk model ini, saya kira? Haruskah ada beberapa cabang rilis juga? dan jika demikian, bagaimana saya harus memberi nama mereka?
tugberk
Pertama-tama, Anda tidak perlu mengikutinya ke surat itu, cukup buat aturan yang Anda pertahankan. Lakukan yang terbaik untuk Anda & gaya tim Anda. Kedua, ya, banyak fitur dan cabang rilis adalah normal kecuali Anda memiliki proyek berumur pendek dengan satu fitur dan satu rilis :). Penamaan, menurut artikel adalah rilis- * dan fitur- *. Saya kira Anda meletakkan nomor versi yang akan datang sebagai pengganti tanda bintang untuk rilis, dan id pelacak masalah untuk cabang-cabang fitur.
Tamás Szelei
1

Apa yang saya saksikan sebagian besar waktu adalah:

  • Master adalah untuk produk Anda. Akhirnya semua versi masa depan Anda x.0 akan menjadi master.
  • Anda membuat tag / cabang untuk setiap versi dalam produksi sehingga Anda masih dapat mendukung mereka untuk setiap pelanggan yang membutuhkannya.
  • Menggabungkan perbaikan dari satu atau yang lain adalah untuk menangani per kasus.
xsace
sumber
Terima kasih! jadi menurut Anda masuk akal untuk mempertahankan cabang bernama v1.0, v1.2 masuk akal?
tugberk
@tugberk selama perangkat lunak terkait ada pada versi itu, masuk akal untuk menjaga cabang di sekitar sehingga Anda dapat dengan cepat memotongnya jika Anda memerlukan cabang perbaikan terbaru tertentu. Ketika perangkat lunak tidak ada lagi pada versi itu (tidak didukung lagi sehingga tidak ada lagi pekerjaan yang bisa terjadi), masuk akal untuk melakukan penggabungan akhir cabang dan kemudian menghapusnya. Anda bahkan dapat membuat komit kosong terakhir (saya sering melakukannya di awal cabang), hanya untuk mengatakan "Menutup cabang XXXX", jika tidak, Anda tidak akan menyimpan riwayat cabang (reflog dapat membantu sedikit tetapi ini sesuai repositori)
Patrick Mevzek