Versionierung in Visual Studio der c++ dlls und executables
-
Hallo
Versionierung von exen und dlls ist immer so ein Thema zu dem man keine so wirklich glückliche Lösung im Internet findet.
Bisher haben wir bei unseren c++ und auch c# Projekte die version in der FormMAJOR.MINOR.BUILDNUMBER.REVISION
so angepasst dass wir Major, Minor und Buildnumber händisch erhöht haben und in Revision die Revisionsnummer aus Subversion hineinformatiert haben.
Wir sind nun aber auf git umgestiegen und die Revisionsnummer steht so nicht mehr zur Verfügung.
Wie versioniert ihr? Was kann man automatisieren? Wie kann ich nen bezug zum Gitrepository herstellen. Ähnlich der Revisionsnummer aus subversion.
Das Tool autobuildversion habe ich mir mal installiert.
https://archive.codeplex.com/?p=autobuildversionAber scheint unter VS2017 nicht zu funktionieren. Lässt sich zwar installieren und auch bedienen. Allerding egal was ich einstelle meine Version in meinem .rc File wird nicht erhöht.
-
mit
git describe
kann man eine für den nutzer lesbare info erzeugen. Wobei die AFAIK abhängig von tags ist.
https://stackoverflow.com/questions/4120001/what-is-the-git-equivalent-for-revision-number
-
Hallo firefly. Ja das habe ich auch schon gefunden. Nicht den Link. Aber die Möglichkeit des Taggens.
Das Problem das ich dabei noch habe dass ich in meinem Repository mehrere dlls habe (genau genommen 2, als Informatiker verallgemeinert man ja immer gerne )Taggen kann man in git immer nur das ganze Repository. In svn hatte ja jedes Verzeichnis immer nur die Revisionsnummer bei der zuletzt was geändert wurde.
So konnte man dann immer jeder dll oder auch exe die Nummer aus seinem Verzeichnis verpassen.
Gut Ideal war das auch nicht.DLL-A -> Version 1
DLL-B -> Version 1DLL-A geändert -führt zu DLL-A Version 2 DLL-B Version 1
DLL-B geändert -führt zu DLL-A Version 2 DLL-B Version 3
-
@booster sagte in Versionierung in Visual Studio der c++ dlls und executables:
Taggen kann man in git immer nur das ganze Repository. In svn hatte ja jedes Verzeichnis immer nur die Revisionsnummer bei der zuletzt was geändert wurde.
So konnte man dann immer jeder dll oder auch exe die Nummer aus seinem Verzeichnis verpassen.
Gut Ideal war das auch nicht.Diese Versionierung ist sicher irgendwie auch mit Git möglich - schliesslich sind einige Tools in der Lage für ein gegebenes Verzeichnis den letzten relevanten Commit anzugeben.
git describe
lässt sich dann für eben diesen Commit ausführen.Allerdings finde ich das innerhalb eines einzigen Projekts/Repository etwas verwirrend und unnötig kompliziert. Von Dateien, die aus dem selben Build eines Repository stammen, würde ich eigentlich intuitiv erwarten, dass sie alle auch die gleiche Version haben, besonders wenn die DLLs eine logische Einheit bilden, sich also zurecht im selben Repository befinden. Sollte letzteres nicht der Fall sein, macht es eventuell Sinn, diese in separate Repositories auszulagen und diese z.B. als Submodule zu deinem Repository hinzuzufügen.
Falls es also irgendwann mal passieren könnte, dass du für ein späteres Projekt mal ausschließlich DLL-B benötigst, jedoch nicht DLL-A, dann kann ich dir nur nahelagen, das Projekt möglichst gleich in mehrere Repositories aufzusplitten. Das wird dann im weiteren Verlauf einfacher zu handhaben sein.
Ansonsten verwende ich auch
describe
um meine Versions-Strings automatisch zusammenzubauen, und zwar in der Formgit describe --long --tags --dirty --always
, was dann letztendlich z.b. so aussieht:1.1.2-30-g32ae871-dirty
<letztes Tag>-<Commits seit Tag>-<kurzer Commit Hash>-<Dirty-Flag (wenn es nicht-commitete Änderungen gibt)>
Dabei erzeuge ich den String per Skript so, dass nur für die Eindeutigkeit notwendige Informationen in dem String landen. Die Anzahl der Commits seit dem Tag sowie die Kurzform des Commit Hash werden z.b. nur angefügt, wenn das Commit nicht mit dem Tag übereinstimmt. Für das "Release 1.1.2", also genau den Commit, der mit "1.1.2" getaggt ist, wird also eben nur kurz und bündig
1.1.2
als Versions-String erzeugt.
-
Danke für deine Antwort. Hätte da noch ein paar Fragen dazu
- Wo trägst du die Version ein. Produktversion oder Fileversion
- Wie verhinderst du das die .rc Datei automatisch von VS wieder neu generiert wird und somit die gesetzten Werte überschrieben werden