2009-06-09 16 views
7

Ho un repository git con due rami; uno per il codice che viene utilizzato per la produzione/test e uno che è il firmware di produzione effettivo (sono quasi identici). È giunto il momento di tagliare una versione da inviare al produttore, quindi naturalmente voglio mettere giù alcuni tag appropriati su entrambi i rami.Contrassegna più rami in git?

Ma, sembra che Git non mi permetta di mettere lo stesso nome di tag su entrambi i rami. Se provo a taggare i rami individualmente, mi dice che il tag esiste già quando vado a taggare il ramo dei secondi. Ho provato a passare due commit a git tag, ma non mi è piaciuto neanche quello. Non ho necessariamente bisogno di taggare sempre i due rami in un attimo, ma non voglio aggiungere caratteri casuali ai tag solo per evitare conflitti di nome.

C'è un modo per fare ciò che voglio, o sto volendo fare la cosa sbagliata?


Un ramo è il codice che mette fabbricazione sul dispositivo per verificare che sia stato montato correttamente. L'altro ramo è il codice che viene fornito nel prodotto. Non sono davvero due rami per versione. Questa è la prima versione per questo prodotto e quindi la prima versione per entrambe le filiali, quindi ho provato a taggare entrambi i rami con 'release-1.0'.

risposta

13

Stai facendo la cosa sbagliata. Lo scopo di un tag è identificare univocamente una particolare revisione. Se fossi in te, etichetterei solo il ramo di produzione e lasciare il ramo di prova senza tag.

Tuttavia, è piuttosto strano che tu abbia due filiali indipendenti per ogni versione. Perchè è questo? La risposta potrebbe aiutare a descrivere una soluzione migliore.


Dal momento che le etichette non dovrebbero davvero puntare alla stessa revisione, ma (potenzialmente) diverse revisioni, i tag devono essere qualcosa di simile:

  • appname-1.0-manufacturing
  • appname-1.0-production

In questo modo, si saprà a quale versione appartiene ciascun tag e anche dove il codice è finito.

+1

Un ramo è il codice che la produzione inserisce sul dispositivo per verificare che sia stato assemblato correttamente. L'altro ramo è il codice che viene fornito nel prodotto. Non si tratta in realtà di due rami per versione. Questa è la prima versione per questo prodotto e quindi la prima versione per entrambe le filiali, quindi ho provato a taggare entrambi i rami con 'release-1.0'. Silly me. –

+0

Grazie, ho aggiunto ulteriori informazioni al commento. –

+1

BTW. i nomi dei tag possono essere gerarchici, quindi è possibile utilizzare release-1.0 (o v1.0) e test/release-1.0 –

5

Un tag dà solo un nome a un singolo commit, quindi no, probabilmente non c'è un modo per fare ciò che vuoi.

Sono curioso di sapere quale sarebbe il risultato desiderato. Voglio dire, uno scopo di un tag è di essere un nome che puoi pagare in seguito. Quindi se si git checkout su un tag che si riferisce a due rami .. cosa succede?

+0

Stavo pensando che i tag mi avrebbero permesso di ottenere la versione appropriata di qualsiasi ramo in cui mi trovassi in quel momento. Non ci ho pensato molto oltre a questo. Apparentemente dovrei avere. –

+0

Se un tag dà un nome a un singolo commit, cosa succede quando un particolare commit lo ha selezionato in molti rami? Qual è l'effetto di controllare quel tag? –

+0

Il tag rimane sul commit a cui è stato applicato. Un cherry pick crea un nuovo commit su ciascuno dei diversi rami. Questi nuovi commit hanno lo stesso cambiamento (s) del commit da cui provengono, ma sono tutti commit diversi. –

2

Venire al party in ritardo, ma un'altra alternativa sarebbe quella di unire i due rami, quindi in qualsiasi momento un commit conteneva lo stato del codice di test e del codice di produzione, supponendo che possano coesistere senza conflitti (nel qual caso si tratta di quanto difficile sarebbe questa unione se valesse la pena tentare di farlo). Ciò aiuterebbe anche a evitare situazioni in cui taggate accidentalmente il ramo sbagliato, come può accadere nel tentativo di mantenere sincronizzati il ​​ramo di test e il ramo di produzione.