Perché Git ha tag?

8

Ho letto Git branching e tagging delle best practice e git tagging commenti - best practice , ma non vedo una risposta diretta a qualcosa che mi sono chiesto da molto tempo:

Perché Git ha tag? (anziché solo rami)

Sembrano essere cittadini di seconda classe, o almeno "diversi". Non vengono inseriti a meno che non lo specifichi esplicitamente. Le eliminazioni dei tag remoti non causano la cancellazione nei repository downstream.

Questo ultimo punto è stato un problema recente, in quanto qualcuno ha spinto un sacco di tag garbage con tonnellate di commit da un altro repository. Potremmo eliminarli a monte e gc i commit, ma ciò non si propagerebbe, e la prossima volta che qualcuno ha spinto un tag con git push --tags , avrebbero ripulito quei tag e i commit. Quindi dovevamo assicurarci che tutti li eliminassero.

Quando e perché dovrei usare un tag anziché un ramo?

    
posta Paul Draper 23.01.2015 - 06:16
fonte

2 risposte

10

Questo è fatto di proposito .

They seem to be second-class citizens, or at least "different." They aren't pushed unless you specify that explicitly. Deletions of remote tags doesn't cause deletion in downstream repos.

Non sono d'accordo con la risposta di lxrec su git che ha cattive impostazioni predefinite. Se segui la mailing list, puoi vedere che gli sviluppatori di git si preoccupano davvero di avere impostazioni predefinite sensibili. Avrebbe senso avere --ff-only come valore predefinito? Io non la penso così

I tag rendono possibile avere annotazioni per la propria copia di sviluppo locale. Non vorrei che i miei tag why_does_it_break_here e todo_fix_formatting vengano trasferiti senza il mio consenso (quelli non sono nomi di tag effettivi). Contrassegnare un rilascio, d'altra parte, è qualcosa che si verifica meno spesso, e ha senso richiedere un push esplicito (o usare un alias).

Non vedo una grande differenza tra tag e filiali w.r.t. come si comporta il push / fetch. Nell'esempio, se i tag garbage erano stati rami, la cancellazione si propagherebbe come previsto?

When and why would I use a tag instead of a branch?

In generale:

    I rami
  • sono per alberi: puntano a diversi commit nel tempo
  • I tag
  • sono per singoli commit e sono immutabili (inclusi alberi congelati come le versioni)
risposta data 23.01.2015 - 09:46
fonte
1

1) Perché i tag git sono cittadini di seconda classe?

Perché purtroppo, git ha un sacco di cattive impostazioni predefinite. Per quanto mi piaccia, semplicemente non è uno strumento molto amichevole o intuitivo. Praticamente tutti devono configurare git config o alias o script che utilizzano una dozzina di opzioni - (come --ff-only) per far sì che git inizi a comportarsi nel modo desiderato. I tag sono solo un altro esempio.

2) Perché dovrei usare un tag git invece di un ramo?

Un ramo ha lo scopo di contrassegnare un commit in cui altri commit vengono eseguiti. Quando si effettua un nuovo commit su quel ramo, il ramo stesso "si sposta" in modo che punti al nuovo commit.

Un tag, d'altra parte, contrassegna un commit e quindi continua a contrassegnare lo stesso commit praticamente per sempre (in teoria). L'utilizzo più comune è il tagging che si impegna con le versioni di rilascio ufficiali ogni volta che si distribuisce una nuova versione alla produzione.

Usiamo sia rami che tag per le nostre versioni di rilascio. Il ramo rappresenta solo la versione principale / secondaria, mentre i tag specificano le versioni patch / build all'interno di quella versione principale / secondaria. Quindi, se abbiamo bisogno di applicare una correzione per una vecchia versione, selezioniamo semplicemente il commit del bugfix dal master sul ramo appropriato, quindi taggiamo il nuovo commit con il nuovo numero di versione ottenuto durante la distribuzione.

    
risposta data 23.01.2015 - 08:49
fonte

Leggi altre domande sui tag