Jestem prawie pewien, że widziałem gdzieś w popularnym projekcie Git, gałęzie miały wzór podobny do „feature / xyz”.
Jednak gdy próbuję utworzyć gałąź ze znakiem ukośnika, pojawia się błąd:
$ 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
Ten sam problem dla (mojej pierwszej próby):
$ git checkout -b labs/feature
Jak stworzyć gałąź w Git z ukośnikiem?
HEAD
. Wygląda na to, że git uważa, żeHEAD
jest to link do gałęzi,labs/feature
która nie została utworzona. Nie mam pojęcia, jak to się mogło stać, ale oznacza to, że próba utworzenia oddziału zwanego na jegofoo/bar
podstawie nie działa. Masz pomysł, jak sięHEAD
utknąłeś?.git/refs/heads
tzn. Jeśli to zrobisz,git checkout -b feature/123
wprojectRootFolder/.git/refs/heads
katalogu zobaczysz katalog o nazwie:feature
gdzie w tym katalogu zobaczysz gałąź o nazwie123
. Później, jeśli utworzysz kolejną,feature/124
a następnie wfeature
katalogu, zobaczysz gałąź o nazwie124
HEAD
” Nice one @CBBaileyOdpowiedzi:
Czy jesteś pewien, że gałąź
labs
już nie istnieje (jak w tym wątku )?źródło
foo
przestrzeni nazw), ale niefoo
(który mógłby służyć jako przestrzeń nazw dla innej gałęzi lub być samą gałęzią)pack-refs
, więc robi wszystko, aby cię przed tym chronić.labs
gałąź i próbował stworzyćlabs/feature
, na co git się bał.Możliwe jest posiadanie hierarchicznych nazw gałęzi (nazwy gałęzi z ukośnikiem). Na przykład w moim repozytorium mam takie oddziały. Jednym zastrzeżeniem jest to, że nie możesz mieć zarówno gałęzi „foo”, jak i gałęzi „foo / bar” w repozytorium.
Twój problem nie polega na tworzeniu gałęzi z ukośnikiem w nazwie.
Powyższy komunikat o błędzie mówi o gałęzi „labs / feature”, a nie „foo / bar” (chyba że jest to błąd w kopiowaniu i wklejaniu, tzn. Edytowałeś części sesji). Jaki jest wynik
git branch
lubgit rev-parse --symbolic-full-name HEAD
?źródło
Czasami ten problem występuje, jeśli masz już gałąź o nazwie podstawowej.
Próbowałem tego:
Niestety miałem już oddział o nazwie
features
i dostałem wyjątek z pytającym.Usunięcie gałęzi
features
rozwiązało problem, powyższe polecenie działało.źródło
W moim przypadku zapomniałem, że istniała już nieużywana
labs
gałąź. Usunięcie go rozwiązało problem:Wyjaśnienie:
Każda nazwa może być tylko gałęzią nadrzędną lub normalną, a nie jedną i drugą. To dlatego rozgałęzia się
labs
ilabs/feature
nie może istnieć jednocześnie.Przyczyną takiego zachowania jest to, że gałęzie są przechowywane w systemie plików i tam też nie można mieć pliku
labs
i katalogulabs
na tym samym poziomie.źródło
Mogłem się mylić, ale myślałem, że ukośniki pojawiają się tylko w nazwach gałęzi, gdy dotyczą na przykład zdalnego repo
origin/master
.źródło