Tengo un proyecto con un modelo de ramificación git que sigue aproximadamente el del flujo git de nvie .
Nuestras ramas de lanzamiento se nombran en un formato SemVer , por ejemplov1.5.2
Una vez que una rama de lanzamiento recibe luz verde para la producción, cerramos la rama, fusionándola en maestra, aplicando una etiqueta y luego eliminando la rama.
Como eliminamos inmediatamente la rama de lanzamiento, hemos estado utilizando el mismo identificador para etiquetar la rama, por ejemplo v1.5.2
Aquí están los comandos que usaríamos para cerrar una rama de lanzamiento:
$ 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
Esto parece funcionar en la mayoría de los casos, sin embargo, está causando un problema en el escenario en el que otra instancia del repositorio de git (por ejemplo, otra máquina de desarrollo o entorno de preparación) tiene una comprobación local de la rama v1.5.2.
El git push origin :v1.5.2
comando eliminará la rama en el control remoto, pero no elimina la versión local de la rama (si existe) en todos los repositorios.
Esto lleva a una referencia ambigua, cuando intentas pagar v1.5.2
en esos repositorios:
$ git checkout v1.5.2
warning: refname 'v1.5.2' is ambiguous.
¿Se puede evitar esto sin usar una sintaxis diferente para las ramas, por ejemplo release-v1.5.2
, o v1.5.2-rc
?
¿O es inevitable y, por lo tanto, una idea fundamentalmente mala para crear una etiqueta con el mismo nombre que una rama eliminada?
fuente
git checkout
verificará la etiqueta sobre la rama cuando haya una referencia ambigua, sin embargo, este no es el comportamiento que estoy viendo, ref: gist.github.com/tommarshall/9376724 . ¿Es esto algo que cambió en una versión más moderna de git? ¿Hay una bandera que pueda establecergitconfig
para obtener este comportamiento?Puede especificar explícitamente si desea una rama o una etiqueta utilizando el nombre completo:
o
fuente