Esiste una convenzione di denominazione standard per i tag git? [chiuso]


229

Ho visto molti progetti usare v1.2.3come convenzione di denominazione per i tag in git. Ho anche visto un certo uso 1.2.3. Esiste uno stile ufficialmente approvato o ci sono buoni argomenti per usarli?


19
Con 43 voti e conteggi, mi chiedo se questa preziosa domanda possa essere riformulata e riaperta, con qualche risposta che integri tutti i punti in un bel riassunto e sia in cima? @ PeterEisentraut sembra essere il più completo; mentre la risposta accettata ATM sembra un po 'fuorviante. (Penso che userò v1.2.3 per i tag da solo, dopo aver letto tutti i punti.)
HostileFork dice che non fidarti di SE

1
SO è per la correzione del codice. Le migliori pratiche sembrano appartenere a softwareengineering.stackexchange.com o codereview.stackexchange.com
Cees Timmerman,

Dai un'occhiata a semver.org (versione semantica), che dovrebbe darti alcune idee.
vonbrand,

la mia esperienza mi dice di usare uno schema leggermente diverso. 1. sottodirectory: un tag Git dovrebbe almeno iniziare con v/questo gruppo di tag in uno spazio dei nomi. 2. idealmente, un tag dovrebbe contenere anche un acronimo che identifica in modo univoco l'app. es v/myapp/1.0. Ciò semplifica l'unione del repository git: nel caso in cui le app vengano unite, i tag non si scontreranno nello spazio dei nomi dei tag.
axd,

Risposte:


166

La versione 1.0.0 di Semantic Versioning , di Tom Preston-Werner di fama GitHub, aveva una sotto-specifica per questo:

Specifiche di tagging (SemVerTag)

Questa sotto-specifica DOVREBBE essere utilizzata se si utilizza un sistema di controllo della versione (Git, Mercurial, SVN, ecc.) Per memorizzare il codice. L'utilizzo di questo sistema consente agli strumenti automatizzati di ispezionare il pacchetto e determinare la conformità di SemVer e le versioni rilasciate.

  1. Quando si codificano le versioni in un sistema di controllo versione, il tag per una versione DEVE essere "vX.YZ", ad esempio "v3.1.0" .

Tuttavia, dopo la discussione, questo è stato rimosso e non è più presente nell'ultima versione delle specifiche SemVer (2.0.0 al momento della stesura). Un successivo thread di discussione nello stesso posto è andato più in profondità e ha portato a un nuovo "v1.2.3" è una versione semantica? viene aggiunto alla FAQ in di SemVer masterramo, anche se al momento della scrittura (oltre 2 anni più tardi) questo cambiamento è non è ancora presente nelle specifiche ufficialmente rilasciato.


9
Grazie - Molto vicino. Vorrei che si sono qualificati per questo la vdovrebbe essere lì però.
Troelskn,

3
@troelskn @mojombo == Tom Preston-Werner
peritus


41
Semantic Versioning 1.0.0 utilizza il formato "v1.2.3". Semantic Versioning 2.0.0-rc.1 utilizza probabilmente il formato "1.2.3". L'articolo sulle specifiche di tag (SemVerTag) è stato rimosso dalle specifiche. Altro qui: semver.org
petrnohejl

9
Questa risposta viene fatta quando esisteva il vecchio semver (versione 1.0). Oggi il prefisso 'v' è stato rimosso da semver v2.0. Per i dettagli vedere il post di seguito.
vitalii,

111

Sembrano esserci due convenzioni dominanti (supponendo che si rispettino anche alcuni standard ragionevoli per la numerazione delle versioni stesse):

  • v1.2.3
  • 1.2.3

I vantaggi v1.2.3sono che la documentazione di Git (e anche la documentazione di Mercurial) usa quel formato nei suoi esempi e che diverse "autorità" come il kernel Linux e Git stesso lo usano. (Il menzionato Semantic Versioning lo usava ma non lo fa più.)

I vantaggi 1.2.3sono che gitweb o GitHub possono automaticamente offrire un download tarball o zip del modulo packagename-$tag.tar.gz(e penso che sia abbastanza stabilito che un tarball non debba essere nominato package-v1.2.3.tar.gz). In alternativa, è possibile utilizzare git describedirettamente per generare numeri di versione tarball. Per i progetti leggeri senza un processo di rilascio formale, queste possibilità possono essere abbastanza convenienti. Va anche notato che la versione semantica non è affatto l'unico o uno standard universalmente accettato per la numerazione delle versioni. Notevoli progetti come GNOME e innumerevoli altri progetti usano la 1.2.3denominazione dei tag.

Penso che sia probabilmente troppo tardi per consolidare queste posizioni. Come sempre, sii coerente e ha senso.


Aggiornamento: Come menzionato in questo commento, GitHub ora offre un nome tarball con la 'v' rimossa dal tag.


13
Per quanto riguarda GitHub e la generazione di tarball: non è più rilevante. Spogliano la "v" dal tag.
Hermann Bier,

6
Il prefisso "v" è anche molto utile quando si ordinano i tag in ordine alfabetico. Possono esistere anche altri tag; sia ufficialmente in un repository principale o per monitorare localmente il lavoro di uno sviluppatore. Con i prefissi 'v' i tag di rilascio formano il proprio gruppo, invece di essere sparsi in tutto il resto dello spazio dei nomi.
Robie Basak,

1
Aggiornata la risposta per riflettere che SemVer non utilizza più v.
Adam Spires,

80

La ragione della precedente "v" è storica. SCCS precedenti (cvs, rcs) non è stato in grado di distinguere tra un identificatore di tag e un numero di revisione. Gli identificatori di tag sono stati limitati per non iniziare con un valore numerico in modo da poter rilevare i numeri di revisione.


5
+1: buona prima risposta e un nome da uno dei miei libri preferiti :-) Forse la tua prossima risposta sarà su una domanda più attuale, però.
Johnsyweb,

1
... ma se questo è vero solo per i vecchi SVCS, cosa succede se il punto di questa risposta è una domanda sul Git moderno?
MestreLion,

3
questo è ancora utile in git, quindi puoi facilmente distinguere i tag di versione da altri tipi di tag (i tag sono utili per molte altre cose)
Benja

19

Non che io sappia.
Ma Git non consentirà contemporaneamente un tag e un ramo con lo stesso nome, quindi se hai un ramo " 1.1" per 1.1opere, non mettere un tag " 1.1", usa ad esempio " v1.1"


8
Utilizzare per i rami 1.1.x. Questo è tutto.
vitalii,

1
bella cattura, grazie.
RY

10

I nuovi gestori di pacchetti consigliano di taggare le versioni senza prefisso v(come il compositore per progetti PHP). SemVer 2.0 non ha nulla a che vedere con le specifiche dei tag. È fatto intenzionalmente per evitare conflitti. Tuttavia, si consiglia di aggiungere un prefisso vnella documentazione e nei riferimenti testuali. Ad esempio, il formato v1.0.4anziché pieno version 1.0.4o ver. 1.0.4è abbastanza dettagliato ed elegante nella documentazione.


22
"È consigliato di ..." Consigliato da chi e dove possiamo vedere quel consiglio nel suo contesto originale?
bignose il

8

Usiamo rami e tag per il lavoro specifico del rilascio seguito rispettivamente dal rilascio effettivo:

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

Ogni sviluppatore prende una decisione mentale sul fatto che il lavoro che sta per commettere sia applicabile solo al master o se sia rilevante anche per la filiale. È possibile notare che le modifiche apportate al ramo vengono ricollegate al master, ma alcune modifiche al master non andranno mai sul ramo (vale a dire quelle non destinate alla versione 1.6, in questo esempio).

Quando siamo pronti per il rilascio, lo etichettiamo e poi lo ricolleghiamo un'ultima volta, e chiamiamo il tag con lo stesso nome del ramo, ma con un identificatore aggiuntivo su quale particolare versione sia, ad esempio "1.6-release" o "1.6-beta" o "1.6-rc2", eccetera.

... ------o---o---o--o---o--- ...   master
         /       /
        /       /
... ---o------(*)--- ...      1.6 branch
          1.6-release

Grazie - questa è una buona risposta per descrivere come si fa la ramificazione, ma in realtà intendevo solo se ci fosse qualche motivo (tecnico) specifico per usare un certo schema di denominazione in Git. Ti sto ancora dando un voto per i bei diagrammi;)
troelskn

Ah, capito! Ci scusiamo per l'incomprensione della tua domanda. No, non esiste un motivo tecnico specifico per l'utilizzo di un nome particolare, diverso dalla comunicazione umana. Puoi nominare i tuoi rami e tag praticamente come preferisci.
John Feminella,

Il tuo ramo versione 1.6 è chiamato "ramo 1.6"? Pensavo che gli spazi non fossero supportati nei nomi delle filiali.
Cees Timmerman,

8

Non conosco standard. Scelgo semplicemente i nomi dei miei tag in modo tale da poter attaccare a

VERSION = `git describe --tags`

nei miei script di build. Pertanto, la convenzione di denominazione dei tag dipende in realtà dalla convenzione di denominazione della versione del progetto.


1
git descrivono --tags:>
Damien Carol

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.