Złożona nazwa gałęzi Git złamała wszystkie polecenia Git
Próbowałem utworzyć gałąź z master
za pomocą następującego polecenia:
git branch SSLOC-201_Implement___str__()_of_ProductSearchQuery
Kiedy Git nagle przestał odpowiadać. Podejrzewam, że winni są w jakiś sposób nieoznaczeni ()
. Teraz, gdy próbuję uruchomić dowolną komendę Git, dostaję ten sam błąd:
git:176: command not found: _of_ProductSearchQuery
Z liczbą po git
rosnącą za każdym razem, gdy wpisuję polecenie.
1 answers
Problem
Czy ktoś może wyjaśnić, co się stało? [...] Chciałbym móc usunąć tę gałąź, ale Git mi nie działa.
By running
git branch SSLOC-201_Implement___str__()_of_ProductSearchQuery
W zsh, nie stworzyłeś żadnej gałęzi . Zamiast tego przypadkowo zdefiniowałeś trzy funkcje powłoki, nazwane git
, branch
, i SSLOC-201_Implement___str__
, które ignorują swoje parametry (jeśli istnieją) i których ciałem jest _of_ProductSearchQuery
. Możesz sprawdzić na własne oczy, że rzeczywiście tak się stało, powołując się na wbudowane polecenie zsh o nazwie functions
, które wyświetla listę wszystkich istniejących funkcji powłoki:
$ functions
SSLOC-201_Implement___str__ () {
_of_ProductSearchQuery
}
branch () {
_of_ProductSearchQuery
}
git () {
_of_ProductSearchQuery
}
Niestety, chociaż pozostałe dwie funkcje powłoki nie są problematyczne, funkcja powłoki o nazwie " git " teraz zaciemnia bona fide git
dowództwo!
$ which git
git () {
_of_ProductSearchQuery
}
# but the real "git" is a binary file that lives in /usr/local/bin/git (or some similar path)
Dlatego następnie otrzymasz błąd
command not found: _of_ProductSearchQuery
Gdy próbujesz uruchomić polecenie Git, np. git log
, git status
, itd. (zakładając oczywiście, że żadne polecenie o nazwie _of_ProductSearchQuery
istnieje).
Side note
[...] Dostaję ten sam błąd:
git:176: command not found: _of_ProductSearchQuery
(z liczbą po
git
rosnącą za każdym razem, gdy wpisuję polecenie)
Ta liczba odpowiada po prostu wartości HISTCMD
, zmiennej środowiskowej posiadającej
[t] on bieżący numer zdarzenia historii w interaktywnej powłoce, innymi słowy numer zdarzenia polecenia, które spowodowało odczytanie
$HISTCMD
.
Zobacz Instrukcja zsh po więcej szczegółów.
Rozwiązanie
I jak mogę wrócić do normalności?
Po Prostu Usuń problematyczną funkcję powłoki (i dwie pozostałe, które utworzyłeś przypadkowo, gdy przy niej jesteś):
unset -f git
unset -f branch SSLOC-201_Implement___str__
Więc wszystko powinno być w porządku.
Co jeśli unset
jest również shadowed?!
Dobre pytanie ! Odsyłam do Wumpus W. wumbley ' s excellent comment poniżej.
Branch-naming tips
Unikaj jakichkolwiek specjalne znaki powłoki
Tak, jak zaznaczono w komentarzach, nawiasy są poprawnymi znakami w nazwach gałęzi Git; wystarczy odpowiednio zacytować nazwę, np.
$ git branch 'foo()bar'
$ git branch
foo()bar
* master
$ git checkout 'foo()bar'
Switched to branch 'foo()bar'
Jednak potrzeba cytowania takich nazw za każdym razem , gdy są używane jako argumenty wiersza poleceń, powinna przekonać cię do rezygnacji z nawiasów w nazwach referencyjnych. Ogólnie rzecz biorąc, należy (w miarę możliwości) unikać znaków, które mają szczególne znaczenie w muszlach, aby zapobiec niespodziankom jak ten.
Użyj prostych nazw gałęzi
Powinieneś zachować nazwy swoich oddziałów krótko i słodko. Długie opisy jak
SSLOC-201 _ _ _ _ Str__() _of_productsearchquery
Należą do komunikatów commit, nie do nazw gałęzi.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-05-23 11:45:29