Un collègue et moi avons discuté / discuté à tour de rôle des problèmes / mérites de l'intégration d'une version dérivée du référentiel git actuel dans notre code chaque fois qu'il est construit.
Nous pensons que les mérites comprennent:
- Pas besoin de s'inquiéter d'une erreur humaine lors de la mise à jour d'un numéro de version
- Traçabilité entre ce que nous trouvons dans un appareil et le code source dont il est dérivé
Les problèmes qui se sont posés (pour nous) comprennent:
- Les systèmes de construction dérivés d'IDE (par exemple MPLABX) peuvent rendre difficile la détermination de l'emplacement de ces types de crochets (et cela peut finir par être assez ringard à la fin)
- Plus de travail pour réellement l'intégrer dans les scripts de construction / makefiles
- Le couplage à une approche de construction particulière (par exemple, si une personne construit avec XCode et l'autre MPLABX) peut créer des surprises en aval
Nous sommes donc curieux de savoir où d'autres ont atterri dans ce débat. Il est vraiment facile pour la discussion de devenir anecdotique. Il y a beaucoup de gens qui insistent sur l'automatisation de bout en bout, suspendent la quantité de travail initial et le couplage qu'il crée. Et il y en a beaucoup d'autres de l'autre côté du débat, qui font la chose la plus simple qui fonctionne et qui vivent avec les risques.
Y a-t-il une réponse raisonnée de quel côté est le mieux pour atterrir?
la source
it describe
(la dernière partie de la chaîne) n'est pas le cset-id de la balise, mais le hachage du changeset, pour lequel nous obtenons une description . Sous une forme lisible par l'hommev1.1.2-6-a3b27gae
, "Six changesets after changeset, tagged as v1.1.2-6, has short changeset-hash a3b27gae"git checkout v1.1.2
ou répertorier la validation de la balise avecgit rev-list v1.1.2 | head -n 1
.Nous avions l'habitude d'être une boutique SVN, donc ce calcul était facile - le numéro de build était la version SVN et c'était tout. Nous avons essayé de continuer ainsi lorsque nous avons commencé à migrer vers DCVSes et nous avons constaté que cela échouait pour plusieurs raisons.
Tout d'abord, qui sait si la rév 69bc333bc8d8 est avant, après ou concurrente avec la rév 25b0f0d1052c? Il y a très peu de contexte par rapport au système SVN lorsque vous saviez au moins que 101 était après 100. Deuxièmement, la nature du contrôle de source DCVS rend les choses non linéaires à bien des égards lorsque les générations suivantes pourraient ne pas faire avancer la même balle.
Nous avons finalement décidé d'utiliser un serveur de build pour distribuer les numéros de build aux choses car il avait la bonne visibilité et la capacité de le gérer.
la source
J'utilise le schéma suivant pour un système de construction Visual Studio d'une DLL C # pour générer automatiquement les numéros de version (Nous avons toujours eu des problèmes avec les déploiements qui ne sont pas effectués correctement, donc nous avions besoin d'un moyen propre de garantir le déploiement de la version correcte).
Notez que cela suppose que vous avez 2 numéros fongibles non signés 16 bits avec lesquels jouer. La création d'un système équivalent qui utilise des nombres plus petits pourrait également se faire.
Notez également que les champs non numériques peuvent être utiles si vous pouvez les joindre en tant que métadonnées. Par exemple, en ajoutant le numéro de version de git en tant que numéro de version d'information.
la source
Je relie directement la sortie de git status, log et diff dans l'exécutable. Il y a ensuite une option pour l'imprimer. L'avantage est que vous pouvez non seulement déterminer à partir de quelle branche votre binaire a été construit, mais également quelles modifications de code source non validées sont incluses. S'il te plait regarde:
https://github.com/colding/MercuryFIX/tree/master/stdlib/scm_state
Vous devriez pouvoir utiliser ces 3 fichiers pour créer votre propre librairie d'état SCM.
la source
Je recommanderais l'utilisation d' Autorevision .
Vous pouvez obtenir une sortie dans divers formats, par exemple un en- tête de style c .
Il existe également quelques exemples (dans le répertoire contrib) de la façon dont vous pouvez connecter les choses pour que, peu importe qui construit et comment il le fasse, il obtiendra toujours les mêmes informations de version, même s'il construit à partir d'une archive tar.
De plus, puisqu'en plus d'
git
Autorevision fonctionne avecsvn
ethg
il permet de passer plus facilement de svn sans avoir à trop changer une fois que vous l'avez configuré.la source
<VCS_TAG>-<VCS_SHORT_HASH>
,<VCS_TAG>-<VCS_TICK>
ou même<VCS_ACTION_STAMP>
si des travaux tout. Si vous voulez une liste complète de chacun de ces symboles, je vous suggère de consulter la page de manuel .