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.

Czy ktoś może wyjaśnić, co się stało? I jak mogę wrócić do normalności? Chciałbym usunąć tę gałąź, ale jak Mogę to zrobić?
Author: jubobs, 2015-09-02

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.

 610
Author: jubobs,
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