Ho un progetto con un modello di ramificazione git che segue approssimativamente quello del flusso git di nvie .
Le nostre filiali di rilascio sono denominate in un formato SemVer , ad esv1.5.2
Una volta che un ramo di rilascio ha ricevuto il via libera per la produzione, chiudiamo il ramo, fondendolo in master, applicando un tag e quindi eliminando il ramo.
Poiché eliminiamo immediatamente il ramo di rilascio, abbiamo usato 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 gestione temporanea) ha un checkout locale del ramo v1.5.2.
Il git push origin :v1.5.2comando eliminerà il ramo nel telecomando, ma non elimina la versione locale del ramo (se esiste) in tutti i repository.
Ciò porta a un riferimento ambiguo, quando si tenta di effettuare il checkout v1.5.2in questi repository:
$ git checkout v1.5.2
warning: refname 'v1.5.2' is ambiguous.
Questo può essere evitato senza usare una sintassi diversa per i rami, ad esempio release-v1.5.2, o v1.5.2-rc?
O è inevitabile, e quindi una pessima idea creare un tag con lo stesso nome di un ramo cancellato?
git checkoutcontrollerà il tag sopra il ramo quando c'è un riferimento ambiguo, tuttavia questo non è il comportamento che sto vedendo, ref: gist.github.com/tommarshall/9376724 . È qualcosa che è cambiato in una versione più moderna di git? C'è una bandiera che posso impostaregitconfigper ottenere questo comportamento?