Zusammenfassung
Für mich besteht die einzige zuverlässige Möglichkeit zur Versionssoftware darin, die Hash- oder Änderungssatzkennung Ihres Versionskontrollsystems zu verwenden.
Eine allgemeine Versionsnummer des Builds kann nützlich sein, ist jedoch nur dann wirklich eindeutig, wenn Sie über einen Build-Server verfügen und / oder jede Version signieren. Für viele von uns ist dies jedoch einfach nicht realisierbar.
Wenn Ihr Projekt auf mehrere Versionskontroll-Repositorys aufgeteilt ist, müssen Sie auch einen Mechanismus erstellen, mit dem Ihre Benutzeroberfläche jedes abhängige Repository abfragen und den Hash an den Benutzer zurückmelden kann.
Beispiel aus persönlicher Erfahrung
In einem Projekt bei einem früheren Arbeitgeber, bei dem wir Probleme mit unserer (internen) Kundenmodifizierungssoftware hatten und diese neu kompilierten, habe ich einen Prozess eingeleitet, bei dem die Quecksilber-Hashes in jede Anwendung und Bibliothek kompiliert wurden. Bei jedem Start der Software wurde eine Abfragezeichenfolge erstellt, indem alle Softwarekomponenten abgefragt wurden.
Diese Revisionszeichenfolge wurde angezeigt, als Sie zur Info-Seite gingen, und wurde bei jedem Start der Anwendung in die Protokolldatei geschrieben. Es hatte die Form:
Application name (6a72e7c61f54)
Library1 (b672a13a41e1)
Library2 (9cc35769b23a)
Library2 (9cc35769b23a)
Library3 (4e9f56a0186a+)
Library2 (9cc35769b23a)
Library4 (2e3b08c4ac76)
Library1 (b672a13a41e1)
Library2 (9cc35769b23a)
Daran konnte ich leicht erkennen, dass sie Library3 geändert und diese Änderungen nicht in das Repository übernommen hatten, sodass sie Code verwenden, der nicht kontrolliert wird. Ich könnte die Hashes auch mit meinem aktuellen Testsystem vergleichen, um festzustellen, dass sie Library1 auf eine ältere Version zurückgesetzt haben.
Dies bedeutete, dass ich immer dann, wenn ein Fehler gemeldet wurde, genau den Code neu erstellen konnte, der zum Zeitpunkt des Problems verwendet wurde, oder zumindest mit Sicherheit wusste, dass ich das Setup nicht reproduzieren konnte.
Weitere Informationen zu dem von mir verwendeten Build-System, wie ich dies erreicht habe, welche Probleme ich hatte und was die Leute vorgeschlagen haben, um sie zu vermeiden, finden Sie in meiner Frage zum Stapelüberlauf .
Hinweis: Dieses System ist nur dann wirklich funktionsfähig, wenn Sie ein Revisionskontrollsystem verwenden, bei dem ein bestimmter Hash garantiert zu demselben Satz von Dateien in Ihrem Arbeitsverzeichnis führt (z. B. Git und Mercurial), wenn ein bestimmtes Arbeitsverzeichnis eine Mischung von Dateien enthalten kann und Verzeichnisse aus mehreren Revisionen (z. B. svn), dann sind alle Wetten bezüglich des Status des Arbeitsverzeichnisses deaktiviert und diese Methode funktioniert überhaupt nicht.