Un collègue et moi avons pris des virages en discussion/discussion sur les problèmes/mérites d'intégration d'une version dérivée du référentiel GIT actuel dans notre code chaque fois qu'il s'appuie.
Nous pensons que les mérites incluent:
Les problèmes qui sont apparus (pour nous) incluent:
Nous sommes donc curieux où d'autres ont atterri sur ce débat. Il est vraiment facile pour la discussion de devenir anecdotique. Il y a beaucoup de monde là-bas qui insistent sur l'automatisation de bout en bout, accrochent la quantité de travail avant et le couplage en créant. Et il y a beaucoup d'autres de l'autre côté du débat, qui font simplement la chose la plus facile qui fonctionne et vivent avec les risques.
Y a-t-il une réponse raisonnée à quel côté est le mieux pour atterrir?
Nous utilisons Git décrit avec des balises de version. Le flux est fondamentalement:
git describe
git describe
fournit le nom de la balise, le nombre de commits depuis la balise et le hachage de la balise. Un étiquette d'échantillon ressemble à:
v1.1.2-6-a3b27gae
Cela bénéficie des avantages que les développeurs reçoivent des haubans, donc si quelque chose se casse entre les constructions, le développeur peut facilement diffuser les changements. C'est aussi stupide simple à gérer; Demagez-vous simplement que votre équipe dirigeait Créez et appuyez sur la balise sur une nouvelle succursale BUGFIX et votre système de construction s'occupe du reste.
Nous émettons le hachage (et le numéro de construction) car il est plus facile pour les utilisateurs de comprendre nos numéros de version. Nous constatons que cela nous donne le meilleur des deux mondes, tout en fournissant suffisamment d'informations pertinentes lors de la création d'une version.
Actuellement, nous avons une version légèrement plus compliquée de cela, mais l'idée reste.
Nous avions l'habitude d'être une boutique SVN afin que ce math était facile - le nombre de bâtiments était le SVN REV et c'était crevé. Nous avons essayé de conserver cela lorsque nous avons commencé à passer à DCVSSe et avons constaté que cela a échoué pour quelques raisons.
Premièrement, qui sait si Rev 69BC333BC8D8 est avant ou après ou simultanément avec REV 25B0F0D1052C? Il y a très peu de contexte par rapport au système SVN lorsque vous connaissez au moins 101 après 100. Deuxièmement, la nature du contrôle de la source DCVS rend les choses non linéaires à bien des égards lorsque les constructions ultérieures ne font pas progresser la même balle.
Nous nous sommes enfin installés sur l'utilisation d'un serveur de construction pour distribuer des numéros de construction à des choses car elle avait la bonne visibilité et la bonne capacité à le gérer.
Je lie directement la sortie du statut GIT, du journal et du diffus dans l'exécutable. Ensuite, il y a une option pour imprimer cela. L'avantage est que vous êtes non seulement capable de déterminer quelle branche votre binaire a été créée, mais également les changements de code source non engagés sont inclus. S'il te plait regarde:
https://github.com/colding/mercuryfix/tree/master/stdlib/scm_state
Vous devriez être capable d'utiliser ces 3 fichiers pour créer votre propre chose de SCM State Lib.
J'utilise le schéma suivant pour un système de construction Visual Studio d'un C # DLL Pour générer automatiquement des numéros de version (nous avons historiquement eu des problèmes avec les déploiements qui ne sont pas effectués correctement, un moyen propre de garantir le déploiement de la version correcte s'est produite).
Notez que cela suppose que vous avez 2 numéros non signés fongibles de 16 bits à jouer. Créer un système équivalent qui utilise des nombres plus petits pourraient également être effectués.
Notez également que les champs non numériques peuvent être utiles si vous pouvez les attacher sous forme de métadonnées. Par exemple, ajoutez le numéro de version GIT comme numéro de version d'information.
Je recommanderais l'utilisation de AutOverevision .
Vous pouvez obtenir une sortie dans un format de variété, par exemple A en-tête de style C .
Il y a aussi quelques exemples (dans le direct Dir) de la façon dont vous pouvez accrocher les choses de sorte que, peu importe qui construisant et comment ils le font, ils obtiendront toujours les mêmes informations de version, même s'ils construisent d'une archive.
De plus, depuis en plus de git
autoréevision fonctionne avec svn
et hg
Il facilite l'absorption de SVN sans avoir à changer trop une fois que vous l'avez installé.