Existe uma convenção de nomenclatura padrão para tags git? [fechadas]

229

Eu já vi muitos projetos usando v1.2.3como convenção de nomenclatura para tags no git. Eu também vi algum uso 1.2.3. Existe um estilo oficialmente aprovado, ou existem bons argumentos para usá-lo?

Troelskn
fonte
19
Com 43 votos positivos e contando, fico imaginando se essa pergunta valiosa poderia ser reformulada e reaberta, com algumas respostas integrando todos os pontos em um bom resumo e estando no topo? @ PeterEisentraut's parece ser o mais completo; enquanto a resposta aceita pelo ATM parece um pouco enganadora. (Acho que vou usar a v1.2.3 para tags sozinho, depois de ler todos os pontos.)
HostileFork diz que não confia em SE
1
SO é para a fixação de código. As práticas recomendadas parecem pertencer a softwareengineering.stackexchange.com ou codereview.stackexchange.com
Cees Timmerman
Dê uma olhada no semver.org (versão semântica), que deve lhe dar algumas idéias.
Vonbrand
minha experiência me diz para usar um esquema um pouco diferente. 1. subdiretório: uma tag Git deve começar pelo menos, v/pois agrupa as tags em um espaço para nome. 2. idealmente, uma tag também deve conter um acrônimo que identifique exclusivamente o aplicativo. por exemplo v/myapp/1.0. Isso facilita a mesclagem do repositório git: caso os aplicativos sejam mesclados, as tags não colidirão no namespace da tag.
`` Axd

Respostas:

166

A versão 1.0.0 do Semantic Versioning , de Tom Preston-Werner, do GitHub, tinha uma subespecificação que abordava isso:

Especificação de marcação (SemVerTag)

Esta sub-especificação DEVE ser usada se você usar um sistema de controle de versão (Git, Mercurial, SVN, etc) para armazenar seu código. O uso desse sistema permite que ferramentas automatizadas inspecionem seu pacote e determinem a conformidade do SemVer e as versões lançadas.

  1. Ao marcar lançamentos em um sistema de controle de versão, o tag para uma versão DEVE ser "vX.YZ", por exemplo, "v3.1.0" .

No entanto, após a discussão, isso foi removido e não está mais presente na versão mais recente da especificação SemVer (2.0.0 no momento da redação). Um tópico de discussão posterior no mesmo local foi aprofundado e resultou em uma nova versão "v1.2.3" é uma semântica? sendo adicionado ao FAQ na masterfilial do SemVer , embora no momento da redação (mais de 2 anos depois) essa alteração ainda não esteja presente nas especificações oficialmente lançadas.

perito
fonte
9
Obrigado - Isso é muito próximo. Eu gostaria que ele teria qualificado porque o vdeveria estar lá embora.
troelskn
3
@troelskn @mojombo == Tom Preston-Werner
peritus
4
Link atualizado: github.com/mojombo/semver.org/issues/1
Josh Lee
41
Versão semântica 1.0.0 usa o formato "v1.2.3". A versão semântica 2.0.0-rc.1 provavelmente usa o formato "1.2.3". O artigo Especificação de marcação (SemVerTag) foi removido das especificações. Mais aqui: semver.org
petrnohejl
9
Esta resposta é feita quando existia o semver antigo (versão 1.0). Atualmente, o prefixo 'v' foi removido do semver v2.0. Para detalhes, veja o post abaixo.
vitalii
111

Parece haver duas convenções dominantes (supondo que você também cumpra algum padrão razoável para numerar os lançamentos):

  • v1.2.3
  • 1.2.3

As vantagens v1.2.3são que a documentação do Git (e também a documentação do Mercurial) usa esse formato em seus exemplos, e que várias "autoridades", como o kernel do Linux e o próprio Git , o utilizam. (O mencionado Semantic Versioning costumava usá-lo, mas não usa mais.)

As vantagens 1.2.3são que o gitweb ou o GitHub pode oferecer automaticamente um download de tarball ou zip do formulário packagename-$tag.tar.gz(e acho que está bem estabelecido que um tarball não deve ser nomeado package-v1.2.3.tar.gz). Como alternativa, você pode usar git describediretamente para gerar números de versão do tarball. Para projetos leves, sem um processo formal de liberação, essas possibilidades podem ser bastante convenientes. Deve-se notar também que o controle de versão semântico não é de forma alguma o único ou um padrão universalmente aceito para numeração de versões. E projetos notáveis ​​como o GNOME, bem como inúmeros outros projetos, usam a 1.2.3nomeação de tags.

Acho que provavelmente é tarde demais para consolidar essas posições. Como sempre, seja consistente e faça sentido.


Atualização: Conforme mencionado neste comentário, o GitHub agora oferece um nome tarball com o 'v' retirado da tag.

Peter Eisentraut
fonte
13
Em relação à geração GitHub e tarball: não é mais relevante. Eles retiram o 'v' da etiqueta.
Hermann Bier
6
Prefixar 'v' também é bastante útil ao classificar tags em ordem alfabética. Outras tags também podem existir; seja oficialmente em um repositório principal ou para rastrear o trabalho de um desenvolvedor localmente. Com prefixos 'v', as tags de lançamento formam seu próprio grupo, em vez de serem espalhadas por todo o restante do espaço para nome.
precisa
1
Atualizada a resposta para refletir que o SemVer não usa mais v.
Adam Spiers
80

O motivo do 'v' anterior é histórico. O SCCS mais antigo (cvs, rcs) não conseguiu distinguir entre um identificador de marca e um número de revisão. Os identificadores de tag foram restringidos para não começar com um valor numérico, para que os números de revisão pudessem ser detectados.

Bill Door
fonte
5
+1: Boa primeira resposta e um nome de um dos meus livros favoritos :-) Talvez a sua próxima resposta esteja em uma pergunta mais atual.
Johnsyweb
1
... mas se isso é verdade apenas para SVCS mais antigos , e se o objetivo dessa resposta for uma pergunta sobre o Git moderno?
MestreLion
3
este é ainda útil no git, então você pode facilmente distinguir marcas de versão, a partir de outro tipo de etiquetas (tags são úteis para muitas outras coisas)
Benja
19

Não que eu saiba.
Mas o Git não permitirá uma tag e uma ramificação com o mesmo nome ao mesmo tempo; portanto, se você tiver uma ramificação " 1.1" para 1.1trabalhos, não coloque uma tag " 1.1", use por exemplo " v1.1"

VonC
fonte
8
Use para ramificações 1.1.x. É isso aí.
Vitalii
1
boa captura, obrigado.
RY
10

Novos conselhos dos gerentes de pacotes para marcar versões sem prefixo v(como o compositor para projetos PHP). O SemVer 2.0 não tem nada a ver com especificação de tags. É feito intencionalmente devido a evitar conflitos. No entanto, é recomendável adicionar prefixo vna documentação e nas referências de texto. Como formato de exemplo, em v1.0.4vez de completo version 1.0.4ou ver. 1.0.4é bastante detalhado e elegante na documentação.

vitalii
fonte
22
“É aconselhável ...” Aconselhado por quem e onde podemos ver esse conselho em seu contexto original?
bignose
8

Usamos ramificações e tags para o trabalho específico da versão, seguido pela versão real, respectivamente:

o---o-----o---o---o--- ...   master
     \   /       /
      \ /       /
       o-------o--- ...      1.6 branch

Todo desenvolvedor toma uma decisão mental sobre se o trabalho que está prestes a comprometer é aplicável apenas para dominar ou se também é relevante para o ramo. Você pode ver que as alterações feitas na ramificação são mescladas novamente no master, mas algumas alterações no master nunca serão executadas no branch (ou seja, aquelas que não se destinam à liberação 1.6, neste exemplo).

Quando estamos prontos para o lançamento, marcamos a etiqueta e, em seguida, retornamos uma última vez, e nomeamos a tag com o mesmo nome que o ramo, mas com um identificador extra sobre qual versão específica é, por exemplo, "versão 1.6" ou "1.6-beta" ou "1.6-rc2", etc.

... ------o---o---o--o---o--- ...   master
         /       /
        /       /
... ---o------(*)--- ...      1.6 branch
          1.6-release
John Feminella
fonte
Obrigado - essa é uma boa resposta para descrever como você faz ramificações, mas na verdade apenas quis dizer se havia algum motivo (técnico) específico para usar um determinado esquema de nomeação no git. Ainda dando-lhe um upvote para os agradáveis diagramas embora;)
troelskn
Ah, entendi! Desculpe por não entender sua pergunta. Não, não há razão técnica específica para usar um nome específico, além da comunicação humana. Você pode nomear seus ramos e tags praticamente como quiser.
John Feminella
Sua ramificação release-1.6 é denominada "ramificação 1.6"? Eu pensei que os espaços não eram suportados nos nomes das filiais.
precisa
8

Não conheço nenhum padrão. Simplesmente escolho os nomes das minhas tags para poder

VERSION = `git describe --tags`

nos meus scripts de construção. Portanto, a convenção de nomenclatura das tags realmente depende da convenção de nomenclatura da versão do projeto.

Jörg W Mittag
fonte
1
git descreve --tags:>
Damien Carol
1

Não existe uma melhor prática que eu estou ciente de. Aqui estão alguns links:

Geralmente, controle de versão ( 0.0.1, v0.2.1...), talvez de mãos dadas com algum problema de rastreamento pode ser considerada uma abordagem plausível. (.. embora eu costumo usar vnomes de tags predefinidos. veja também a resposta @VonC)

miku
fonte