Um colega e eu nos revezamos debatendo / discutindo os problemas / méritos da integração de uma versão derivada do atual repositório git em nosso código sempre que ele é compilado.
Acreditamos que os méritos incluem:
- Não há necessidade de se preocupar com erros humanos na atualização de um número de versão
- Rastreabilidade entre o que encontramos em um dispositivo e o código fonte do qual foi derivado
Os problemas que surgiram (para nós) incluem:
- Os sistemas de compilação derivados do IDE (por exemplo, MPLABX) podem dificultar a identificação de onde colocar esses tipos de ganchos (e, no final, pode acabar sendo bastante brega)
- Mais trabalho para realmente integrar isso nos scripts / makefiles de construção
- O acoplamento a uma abordagem de compilação específica (por exemplo, e se uma pessoa compilar com o XCode e a outra MPLABX) pode criar surpresas posteriores
Portanto, estamos curiosos sobre onde outros chegaram a esse debate. É realmente fácil para a discussão se tornar anedótica. Existem muitas pessoas que insistem em automação de ponta a ponta, penduram a quantidade de trabalho inicial e o acoplamento que ele cria. E há muitos outros do outro lado do debate, que apenas fazem a coisa mais fácil que funciona e convive com os riscos.
Existe uma resposta fundamentada para qual lado é melhor aterrar?
fonte
it describe
(última parte da string) não é o cset-id da tag, mas o hash do changeset, para o qual obtemos a descrição . Na forma legívelv1.1.2-6-a3b27gae
será "Seis changesets após changeset, tag como v1.1.2-6, tem curta changeset-de hash a3b27gae"git checkout v1.1.2
ou listar o commit da taggit rev-list v1.1.2 | head -n 1
.Nós costumávamos ser uma loja do SVN, então essa matemática era fácil - o número de compilação era a rev. Do SVN e era isso. Tentamos continuar assim quando começamos a mudar para DCVSes e descobrimos que ela falhou por alguns motivos.
Primeiro, quem sabe se a rev 69bc333bc8d8 é anterior, posterior ou simultânea à rev 25b0f0d1052c? Há muito pouco contexto em comparação com o sistema SVN quando você pelo menos sabia que 101 estava depois de 100. Segundo, a natureza do controle de fonte DCVS torna as coisas não lineares de várias maneiras quando as construções subseqüentes podem não estar avançando na mesma esfera.
Finalmente decidimos usar um servidor de compilação para distribuir números de compilação às coisas, pois ele tinha a visibilidade e a capacidade corretas de lidar com isso.
fonte
Eu uso o esquema a seguir para um sistema de criação do Visual Studio de uma DLL C # para gerar automaticamente números de versão (historicamente, tivemos problemas com implantações que não estavam sendo executadas corretamente; portanto, era necessária uma maneira limpa de garantir a implantação da versão correta).
Observe que isso pressupõe que você tenha 2 números não assinados e fungíveis de 16 bits para brincar. A criação de um sistema equivalente que utiliza números menores também pode ser feita.
Observe também que os campos não numéricos podem ser úteis se você puder anexá-los como metadados. Por exemplo, adicionando o número da versão git como o número da versão informativa.
fonte
Estou vinculando diretamente a saída do status git, log e diff no executável. Depois, há uma opção para imprimir isso. A vantagem é que você não é apenas capaz de descobrir de qual ramificação seu binário foi construído, mas também quais alterações de código fonte não confirmadas estão incluídas. Por favor, veja:
https://github.com/colding/MercuryFIX/tree/master/stdlib/scm_state
Você deve poder usar esses 3 arquivos para criar sua própria coisa de lib de estado do SCM.
fonte
Eu recomendaria o uso da Autorevision .
Você pode obter saída em diversos formatos, por exemplo, um cabeçalho no estilo c .
Existem também alguns exemplos (no diretório contribs) de como você pode conectar as coisas para que, independentemente de quem esteja construindo e de como esteja fazendo, elas sempre obtenham as mesmas informações de versão, mesmo que estejam construindo a partir de um tarball.
Além disso, uma vez que, além do
git
Autorevision, trabalhasvn
ehg
facilita o afastamento do svn sem precisar mudar muito depois que você o configurar.fonte
<VCS_TAG>-<VCS_SHORT_HASH>
,<VCS_TAG>-<VCS_TICK>
ou mesmo<VCS_ACTION_STAMP>
devem trabalhar. Se você quiser uma lista completa do que são cada um desses símbolos, sugiro verificar a página de manual .