Parece obvio decirlo, pero: el propósito de los números de versión es permitirle determinar fácilmente qué versión del software está ejecutando cualquiera.
Si hay alguna posibilidad de que alguien tenga acceso a una iteración particular del código, y no pueda determinar fácilmente un identificador único, entonces esa iteración debería tener un número de versión único. Veo esto como la 'primera regla'. Como consecuencia, las versiones distintas claramente querrán números de versión distintos.
Sin embargo, entra más en juego:
Una forma de estar seguro de esto es aumentar los números de versión con cada confirmación, pero esto no suele ser una buena idea. Puede tomar varias confirmaciones / iteraciones para que funcione un cambio relativamente pequeño, y es confuso para el mundo exterior ver la versión 0.0.1 -> 0.0.2 como resultado de una gran cantidad de cambios acumulados y luego 0.0.2 -> 0.0 .56 porque alguien cometió un espacio en blanco corrige un archivo a la vez y no cambió nada funcional.
En realidad, qué tan lejos de "una versión por versión completa" a "una versión para cada confirmación" depende de usted: los otros usuarios y qué sistemas está dispuesto a utilizar para llenar los vacíos.
Personalmente, estoy acostumbrado a trabajar en proyectos pequeños, y estoy feliz de usar hash git hasta una versión que otros usan y una versión de prueba para cada uno de estos (no importa cuán pocas personas espero tener en sus manos). Sin embargo, en compañías más grandes y proyectos más grandes, se usa algo fuera de los números de versión semántica, pero una fidelidad más baja que cada confirmación, como la numeración de candidatos de lanzamiento. Estos tienen ventajas pero agregan complejidad.