Berdasarkan pengalaman saya dengan manajemen ketergantungan tingkat platform perusahaan yang kompleks dan pelepasan versi, saya datang untuk merekomendasikan pendekatan yang saya sebut Semi-Semantic Versioning .
Pada dasarnya itu dibangun dari Semantic Versioning 2.0 tetapi tidak cukup ketat.
Segmen Versi Semi-Semantik:
<primary.release.segment>[-<pre.release.segment>][+<post.release.segment>]
Format Segmen Rilis Utama:
MARKETTING.MAJOR.MINOR.PATCH
Setiap segmen harus memungkinkan alfanumerik, tetapi numerik murni disarankan untuk perubahan inkremental logis.
Seperti SemVer, saya merekomendasikan komponen Major, Minor, dan Patch untuk mewakili tingkatan kompatibilitas terbalik, tetapi saya juga merekomendasikan untuk menambahkan komponen Pemasaran . Hal ini memungkinkan pemilik produk, epik / grup fitur, dan masalah bisnis untuk menabrak komponen utama terlepas dari masalah kompatibilitas teknis.
Tidak seperti jawaban lain, saya tidak merekomendasikan menambahkan nomor Build ke segmen utama. Alih-alih, tambahkan Segmen Pasca Rilis setelah '+' (mis: 1.1.0.0 + build.42). SemVer menyebut metadata build ini, tetapi saya pikir Segmen Pasca Rilis lebih jelas. Segmen ini bagus untuk mendeklarasikan data akhiran sebagai tidak terkait dengan info kompatibilitas di Segmen Rilis primer. Bangun integrasi kontinu Anda kemudian dapat diberi nomor rilis sebelumnya yang ditambahkan dengan nomor build tambahan yang direset setelah setiap rilis utama (mis: 1.1.0.0 -> 1.1.0.0 + build.1 -> 1.1.0.0 + build.2 -> 1.1.0.1). Beberapa orang secara bergantian suka memasukkan nomor revisi svn di sini atau git commit sha untuk membuatnya mudah untuk mengikat ke repositori kode. Pilihan lain adalah dengan menggunakan segmen pasca-rilis untuk perbaikan terbaru dan tambalan, yang mungkin layak dipertimbangkan menambahkan komponen rilis primer baru untuk itu. Itu selalu bisa turun ketika komponen tambalan bertambah, karena versi secara efektif dibariskan kiri dan diurutkan.
Selain segmen rilis dan pasca-rilis, orang sering ingin menggunakan Segmen Pra-Rilis untuk menunjukkan pra-rilis yang hampir stabil seperti alfa, beta, dan kandidat rilis. Pendekatan SemVer untuk ini berfungsi dengan baik, tetapi saya sarankan memisahkan komponen numerik dari pengklasifikasi alfa-numerik (mis: 1.2.0.0 + alpha.2 atau 1.2.0.0 + RC.2). Biasanya Anda akan menabrak segmen rilis pada saat yang sama dengan menambahkan segmen pasca-rilis dan kemudian menjatuhkan segmen pra-rilis ketika Anda berikutnya menabrak segmen rilis primer (mis .: 1.0.1.2 -> 1.2.0.0-RC.1 - > 1.2.0.0). Segmen pra-rilis ditambahkan untuk menunjukkan bahwa versi rilis akan datang, biasanya hanya seperangkat fitur tetap untuk pengujian dan berbagi yang lebih mendalam yang tidak berubah dari menit ke menit berdasarkan lebih banyak komitmen.
Keindahan dari memiliki semua ini secara semantik didefinisikan dengan cara yang mencakup hampir semua kasus penggunaan adalah bahwa Anda dapat menguraikan, mengurutkan, membandingkan dan menambahkannya dengan cara standar. Ini sangat penting ketika menggunakan sistem CI untuk aplikasi yang kompleks dengan banyak komponen kecil versi independen (seperti layanan mikro) masing-masing dengan dependensi yang dikelola sendiri.
Jika Anda tertarik, saya menulis parser semi-semantik di ruby . Saya perlu tidak hanya menggunakan pola ini tetapi dapat mengelola aplikasi lain yang menggunakannya.