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?
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.)
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.
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.
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" .
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.
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.
+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"
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.
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.
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.
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)
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 exemplov/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.Respostas:
A versão 1.0.0 do Semantic Versioning , de Tom Preston-Werner, do GitHub, tinha uma subespecificação que abordava isso:
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
master
filial 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.fonte
v
deveria estar lá embora.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.3
sã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.3
são que o gitweb ou o GitHub pode oferecer automaticamente um download de tarball ou zip do formuláriopackagename-$tag.tar.gz
(e acho que está bem estabelecido que um tarball não deve ser nomeadopackage-v1.2.3.tar.gz
). Como alternativa, você pode usargit describe
diretamente 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 a1.2.3
nomeaçã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.
fonte
v
.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.
fonte
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
" para1.1
trabalhos, não coloque uma tag "1.1
", use por exemplo "v1.1
"fonte
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 prefixov
na documentação e nas referências de texto. Como formato de exemplo, emv1.0.4
vez de completoversion 1.0.4
ouver. 1.0.4
é bastante detalhado e elegante na documentação.fonte
Usamos ramificações e tags para o trabalho específico da versão, seguido pela versão real, respectivamente:
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.
fonte
Não conheço nenhum padrão. Simplesmente escolho os nomes das minhas tags para poder
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.
fonte
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 usarv
nomes de tags predefinidos. veja também a resposta @VonC)fonte