Estoy bastante seguro de que vi en algún lugar de un proyecto popular de Git que las ramas tenían un patrón como "feature / xyz".
Sin embargo, cuando intento crear una rama con el carácter de barra diagonal, aparece un error:
$ git branch labs/feature
error: unable to resolve reference refs/heads/labs/feature: Not a directory
fatal: Failed to lock ref for update: Not a directory
Mismo problema para (mi intento inicial):
$ git checkout -b labs/feature
¿Cómo se crea una rama en Git con el carácter de barra diagonal?
HEAD
. Parece que git piensa queHEAD
es un enlace a la ramalabs/feature
que no se ha creado. No tengo idea de cómo pudo haber sucedido esto, pero significa que su intento de crear una rama llamada afoo/bar
partir de ella no está funcionando. ¿Alguna idea de cómo teHEAD
despegaste?.git/refs/heads
es decir, si lo hacegit checkout -b feature/123
, dentro de suprojectRootFolder/.git/refs/heads
directorio verá un directorio llamado:feature
donde dentro de ese directorio verá una rama llamada123
. Más tarde, si crea otrofeature/124
, dentro delfeature
directorio, verá una rama llamada124
HEAD
" Nice one @CBBaileyRespuestas:
¿Estás seguro de que la rama
labs
aún no existe (como en este hilo )?fuente
foo
' espacio de nombres), pero nofoo
(que podría servir como un espacio de nombres para otra rama o ser una rama en sí)pack-refs
, por lo que está haciendo todo lo posible para protegerte de esto.labs
rama y trató de crearlabs/feature
, lo que git rechazó.Es posible tener nombres de rama jerárquicos (nombres de rama con barra). Por ejemplo, en mi repositorio tengo tales ramas. Una advertencia es que no puede tener tanto la rama 'foo' como la rama 'foo / bar' en el repositorio.
Su problema no es crear una rama con una barra diagonal en el nombre.
El mensaje de error anterior se refiere a la rama 'labs / feature', no 'foo / bar' (a menos que sea un error en copiar y pegar, es decir, editó partes de la sesión). ¿Cuál es el resultado de
git branch
ogit rev-parse --symbolic-full-name HEAD
?fuente
A veces, ese problema ocurre si ya tiene una rama con el nombre base.
Intenté esto:
Desafortunadamente, ya tenía una rama llamada
features
, y obtuve la excepción del que hacía la pregunta.La eliminación de la rama
features
resolvió el problema, el comando anterior funcionó.fuente
En mi caso, olvidé que ya había una
labs
rama no utilizada . Eliminarlo resolvió el problema:Explicación:
Cada nombre solo puede ser una rama principal o una rama normal, no ambas. Es por eso que las ramas
labs
ylabs/feature
no pueden existir ambas al mismo tiempo.La razón de este comportamiento es que las ramas se almacenan en el sistema de archivos y allí tampoco puede tener un archivo
labs
y un directoriolabs
en el mismo nivel.fuente
Podría estar equivocado, pero pensé que las barras solo aparecían en los nombres de las ramas cuando se relacionaban con un repositorio remoto, por ejemplo
origin/master
.fuente