251 votes

Utilisation du caractère slash dans le nom de la branche Git

Je suis presque sûr d'avoir vu quelque part dans un projet Git populaire que les branches avaient un modèle comme "feature/xyz".

Cependant, lorsque j'essaie de créer une branche avec le caractère slash, j'obtiens une erreur :

$ 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

Même problème pour (ma première tentative) :

$ git checkout -b labs/feature

Comment créer une branche dans Git avec le caractère slash ?

253voto

VonC Points 414372

Vous êtes sûr de la branche labs n'existe pas déjà (comme dans ce fil ) ?

Vous ne pouvez pas avoir à la fois un fichier et un répertoire avec le même nom.

Vous essayez de faire faire ça à git :

% cd .git/refs/heads
% ls -l
total 0
-rw-rw-r-- 1 jhe jhe 41 2009-11-14 23:51 labs
-rw-rw-r-- 1 jhe jhe 41 2009-11-14 23:51 master
% mkdir labs
mkdir: cannot create directory 'labs': File exists

Vous obtenez l'équivalent de l'erreur "cannot create directory".
Lorsque vous avez une branche avec des barres obliques, elle est stockée comme une sous le nom de .git/refs/heads .

117voto

Jakub Narębski Points 87537

Il est possible d'avoir des noms de branches hiérarchiques (noms de branches avec barre oblique). Par exemple, dans mon référentiel, j'ai de telles branches. Un problème est que vous ne pouvez pas avoir à la fois la branche 'foo' et la branche 'foo/bar' dans le référentiel.

Votre problème n'est pas de créer une branche avec une barre oblique dans le nom.

$ git branch foo/bar
error: unable to resolve reference refs/heads/labs/feature: Not a directory
fatal: Failed to lock ref for update: Not a directory

Le message d'erreur ci-dessus concerne la branche 'labs/feature', et non 'foo/bar' (à moins qu'il ne s'agisse d'une erreur de copier-coller, c'est-à-dire que vous avez modifié des parties de la session). Quel est le résultat de git branch o git rev-parse --symbolic-full-name HEAD ?

37voto

elbkind Points 26

Ce problème se pose parfois si vous avez déjà une branche avec le nom de la base.

J'ai essayé ça :

git checkout -b features/aName origin/features/aName

Malheureusement, j'avais déjà une branche nommée features et j'ai obtenu l'exception de l'auteur de la question.

Suppression de la branche features a résolu le problème, la commande ci-dessus a fonctionné.

-1voto

crazyscot Points 6675

Je peux me tromper, mais je pensais que les slashs n'apparaissaient dans les noms de branches que lorsqu'ils se rapportaient à un repo distant, par exemple origin/master .

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X