Konteks: Baru-baru ini saya mengetahui tentang Semantic Versioning , dan saya sedang berusaha menentukan cara terbaik untuk menggunakannya secara praktis untuk proyek saya sendiri.
Mengingat semver mengambil perubahan besar, perubahan kecil, dan tambalan ke dalam akun untuk versi, kapan komit tidak boleh ditandai dengan versi yang diperbarui? Tampaknya bagi saya bahwa setiap perubahan akan masuk ke dalam salah satu kategori ini, dan setiap perubahan harus diversi, tetapi ketika saya melihat berbagai proyek populer di GitHub, ini sepertinya bukan cara yang dilakukan (hanya dengan melihat fakta bahwa proyek besar memiliki puluhan ribu komitmen, dengan hanya ratusan tag).
programming-practices
git
semantic-versioning
tagging
VortixDev
sumber
sumber
Jawaban:
SemVer menyangkut rilis versi , bukan komitmen . Jika model kontrol versi Anda mengharuskan setiap komit untuk dikuasai menjadi rilis, maka ya, setiap komit perlu ditandai sesuai dengan tingkat perubahannya.
Namun, secara umum, proyek mengembangkan produk yang sebagian besar stabil pada master dan menandai rilis yang mereka anggap layak untuk didukung. Ketika mereka melakukannya, mereka akan menandai sesuai dengan skema versi mereka, yang tidak harus SemVer pada khususnya.
sumber
Nomor versi dialokasikan untuk rilis. Secara umum tidak setiap komit harus berupa rilis. Ada beberapa alasan untuk ini.
Pertama saat Anda mengatakan Anda "menguji" setiap komit ada tingkat pengujian. Menjalankan tes otomatis pada satu mesin semuanya baik dan bagus, tetapi dalam perangkat lunak yang kompleks kemungkinan tidak akan menangkap setiap masalah. Beberapa masalah mungkin khusus perangkat keras atau konfigurasi, beberapa masalah mungkin lebih tentang pertimbangan manusia-subyektif daripada tentang persyaratan yang sulit diuji.
Kedua menabrak nomor versi utama harus menjadi tindakan yang langka. Ini pada dasarnya berarti bahwa segala sesuatu yang tergantung pada perangkat lunak Anda perlu diperiksa secara manual untuk melihat apakah itu tergantung pada salah satu fitur yang dihapus.
Konsekuensi dari hal ini adalah Anda seharusnya hanya menambahkan fitur ke "API publik" Anda dalam rilis penuh (bukan alfa / beta) jika Anda siap untuk mendukung fitur-fitur tersebut dalam bentuk jangka panjang.
Ketiga sangat membantu untuk menjaga agar jumlah versi dalam penggunaan luas tetap rendah. Bahkan pada cabang yang stabil seringkali lebih baik untuk mengumpulkan sejumlah perbaikan bersama dan membuat satu rilis daripada membuat rilis untuk setiap perbaikan.
sumber
Tampak jelas untuk mengatakan, tetapi: tujuan nomor versi adalah untuk memudahkan Anda menentukan versi perangkat lunak yang dijalankan siapa pun.
Jika ada kemungkinan ada orang yang memiliki akses ke iterasi tertentu dari kode, dan sebaliknya tidak dapat dengan mudah menentukan pengidentifikasi unik, maka iterasi harus memiliki nomor versi yang unik. Saya melihat ini sebagai 'aturan pertama'. Sebagai akibatnya, rilis yang berbeda jelas akan menginginkan nomor versi yang berbeda.
Namun, lebih banyak berperan:
Satu cara untuk memastikan hal ini adalah dengan menabrak nomor versi dengan setiap komit tetapi ini biasanya bukan ide yang baik. Mungkin diperlukan beberapa komitmen / iterasi untuk mendapatkan perubahan yang relatif kecil, dan membingungkan bagi dunia luar untuk melihat versi 0.0.1 -> 0.0.2 sebagai hasil dari sejumlah besar akumulasi perubahan kemudian 0.0.2 -> 0.0 0,56 karena seseorang yang melakukan spasi putih memperbaiki satu file pada satu waktu dan tidak mengubah apa pun yang fungsional.
Seberapa jauh dari "satu versi per rilis penuh" ke "satu versi untuk setiap komit" benar-benar terserah: Anda, pengguna lain, dan sistem apa yang Anda ingin gunakan untuk mengisi kesenjangan.
Saya pribadi terbiasa mengerjakan proyek-proyek kecil, dan saya senang menggunakan hash git hingga versi yang digunakan orang lain dan versi benjolan untuk masing-masing (tidak peduli berapa sedikit orang yang saya harapkan untuk mendapatkannya). Namun di perusahaan yang lebih besar dan proyek yang lebih besar sesuatu di luar nomor versi semantik, tetapi kesetiaan yang lebih rendah daripada komitmen masing-masing, seperti penomoran kandidat rilis digunakan. Ini memiliki kelebihan tetapi menambah kompleksitas.
sumber
Setiap permintaan tarikan yang digabungkan untuk dikuasai harus diversi.
Jika seharusnya bukan versi baru (setidaknya tambalan), kemungkinan tidak boleh digabungkan untuk dikuasai karena fitur / perbaikan / dll tidak lengkap.
Namun, tergantung pada alur kerja tim Anda, Anda mungkin masih berakhir dengan beberapa komitmen untuk dikuasai tanpa versi. Jika ada beberapa komit dalam permintaan tarik yang tidak tergencet (Menurut saya seharusnya), Anda mungkin masih memiliki 10 komit dan hanya 1 versi baru.
sumber