Ho un progetto con un modello git branching che segue approssimativamente quello di nvie's git-flow .
I nostri rami di rilascio sono denominati in un formato SemVer , ad es. v1.5.2
Una volta che un ramo di rilascio riceve la luce verde per la produzione, chiudiamo il ramo, unendolo in master, applicando un tag e quindi eliminando il ramo.
Come eliminiamo immediatamente il ramo di rilascio, abbiamo utilizzato lo stesso identificatore per contrassegnare il ramo, ad es. v1.5.2
Ecco i comandi che useremmo per chiudere un ramo di rilascio:
$ git checkout master
$ git merge v1.5.2
$ git tag -a v1.5.2 -m "Version 1.5.2 - foo bar, baz, etc"
$ git branch -d v1.5.2
$ git branch -dr origin/v1.5.2
$ git push origin :v1.5.2
$ git push
$ git push --tags
Questo sembra funzionare nella maggior parte dei casi, tuttavia sta causando un problema nello scenario in cui un'altra istanza del repository git (ad esempio un'altra macchina di sviluppo o ambiente di staging) ha un checkout locale del ramo v1.5.2. / p>
Il comando git push origin :v1.5.2
cancellerà il ramo nel telecomando, ma non elimina la versione locale del ramo (se esiste) in tutti i repository.
Questo porta ad un riferimento ambiguo, quando provi il checkout di v1.5.2
in questi repository:
$ git checkout v1.5.2
warning: refname 'v1.5.2' is ambiguous.
Questo può essere evitato senza utilizzare una sintassi diversa per i rami, ad es. release-v1.5.2
o v1.5.2-rc
?
O è inevitabile e quindi un'idea fondamentalmente sbagliata per creare un tag con lo stesso nome di un ramo cancellato?