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.2
comando 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.2
in 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 checkout
controllerà 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 impostaregitconfig
per ottenere questo comportamento?