Sommario
Per me, l'unico modo affidabile per il software versione è utilizzare l' hash o l'identificatore del changeset dal tuo sistema di controllo della versione.
Un numero di versione di build complessivo può essere utile, ma è garantito che sia univoco solo se si dispone di un server di build e / o si firma ogni versione. Per molti di noi, tuttavia, questo semplicemente non è praticabile.
Se il progetto è suddiviso su più repository di controllo versione, sarà inoltre necessario creare un meccanismo in base al quale l'interfaccia utente può eseguire query su ciascun repository dipendente e riportare l'hash all'utente.
Esempio per esperienza personale
In un progetto presso un precedente datore di lavoro, in cui avevamo problemi con il nostro software (interno) di modifica del cliente e la sua ricompilazione, ho istituito un processo in base al quale gli hash mercuriali venivano compilati in ogni applicazione e libreria. Ogni volta che il software veniva avviato, veniva creata una stringa di revisione interrogando tutti i componenti del software.
Questa stringa di revisione è stata visualizzata quando si è passati alla pagina about ed è stata scritta nel file di registro ogni volta che è stata avviata l'applicazione. Era della forma:
Application name (6a72e7c61f54)
Library1 (b672a13a41e1)
Library2 (9cc35769b23a)
Library2 (9cc35769b23a)
Library3 (4e9f56a0186a+)
Library2 (9cc35769b23a)
Library4 (2e3b08c4ac76)
Library1 (b672a13a41e1)
Library2 (9cc35769b23a)
Da ciò ho potuto facilmente vedere che avevano modificato Library3 e non avevano eseguito il commit di tali modifiche nel repository, quindi stanno usando codice che non è controllato. Potrei anche confrontare gli hash con il mio attuale sistema di test, quindi potrei essere in grado di identificare che hanno ripristinato (diciamo) Library1 a una versione precedente.
Ciò significava che ogni volta che segnalavano un bug, potevo sempre ricostruire esattamente il codice in uso al momento in cui si verificava il problema, o almeno sapere con certezza che non potevo riprodurre l'installazione.
Per maggiori dettagli sul sistema di compilazione che ho usato, su come ho realizzato questo, quali problemi ho avuto e cosa le persone hanno suggerito di evitarli, dai un'occhiata alla mia domanda Stack Overflow .
Nota: questo sistema è realmente praticabile solo se si utilizza un sistema di controllo di revisione in cui un determinato hash è garantito per generare lo stesso set di file nella directory di lavoro (ad esempio git e mercurial) se una determinata directory di lavoro può contenere una combinazione di file e le directory di diverse revisioni (es. svn), quindi tutte le scommesse sono disattivate per quanto riguarda lo stato della directory di lavoro e questo metodo non funzionerà affatto.