Was Versionsnummern betrift gibt es einen quasi Standard.
Semantic Versioning
Meine Arbeitsweise:
a.b.c
a) Hauptversion wird nur erhöht wenn "from scratch" angefangen wird / bei Erhöhung b und c wird auf 0 gesetzt.
b) bei jedem neuen Feature-Release +1 / bei Erhöhung wird c auf 0 gesetzt.
c) bei jedem Bugfix-Release +1
Ich führe in jedem Teil eine Versionsnummer mit, da ich alles als getrenntes Projekt betrachte - also
1) Programm-Version
2) Datei-Version
3) Datenbank-Version
Aus Sicht des Programms/Clients gibt es dann ein Kompatibilitätsbereiche - Client weiß womit er kann. Datenbank zu alt - Client zu alt etc.
Ich führe Datenbankskripte welche jeweils zu nächsten Version migrieren können. Diese werden allerdings nicht automatisch ausgeführt.
Meine Dateien basieren meist auf
XML mit Schema. Falls es ein neues Dateiformat gibt, konvertiere ich diese via XSD - allerdings nur für den Upgrade-Pfad auf die nächste höhere Version. Unter Umständen werden dann mehrere Upgrades ausgeführt, wenn eine Datei geöffnet wird.
Durch die XSDs und die Versionsnnummern kann ein Client dann sehr gut eingrenzen mit welchen Dateiversionen er kann und welche nicht.