programing

복잡한 Git 분기 이름으로 모든 Git 명령이 중단되었습니다.

skycolor 2023. 5. 17. 22:39
반응형

복잡한 Git 분기 이름으로 모든 Git 명령이 중단되었습니다.

지점을 만들려고 했습니다.master다음 명령을 사용합니다.

git branch SSLOC-201_Implement___str__()_of_ProductSearchQuery

Git가 갑자기 반응을 멈췄을 때.탈출하지 못한 자들이()어떻게든 책임이 있습니다.이제 Git 명령을 실행하려고 할 때마다 동일한 오류가 발생합니다.

git:176: command not found: _of_ProductSearchQuery

뒤의 번호로git명령을 입력할 때마다 증가합니다.

무슨 일이 있었는지 설명할 수 있는 사람?어떻게 하면 정상으로 돌아갈 수 있을까요?해당 지점을 삭제하고 싶은데 어떻게 해야 하나요?

문제

무슨 일이 일어났는지 설명할 수 있는 사람이 있습니까? [...] 해당 분기를 삭제할 수 있으면 좋겠지만 Git이 작동하지 않습니다.

달리기로

git branch SSLOC-201_Implement___str__()_of_ProductSearchQuery

zsh에서 분기를 만들지 않았습니다.대신 실수로 세 의 셸 함수를 정의했습니다.git,branch,그리고.SSLOC-201_Implement___str__매개 변수를 무시하고(있는 경우) 신체가_of_ProductSearchQuery라고 하는 내장된 zsh 명령을 호출하여 실제로 이러한 현상이 발생했는지 직접 확인할 수 있습니다.functions여기에는 기존의 모든 셸 함수가 나열됩니다.

$ functions                                                     
SSLOC-201_Implement___str__ () {
    _of_ProductSearchQuery
}
branch () {
    _of_ProductSearchQuery
}
git () {
    _of_ProductSearchQuery
}

불행하게도, 다른 두 개의 셸 함수는 문제가 없지만, "깃"이라고 불리는 셸 함수는 이제 진짜 명령을 그림자처럼 만듭니다!

$ which git
git () {
    _of_ProductSearchQuery
}
# but the real "git" is a binary file that lives in /usr/local/bin/git (or some similar path)

따라서 나중에 오류가 발생합니다.

command not found: _of_ProductSearchQuery

Git 명령을 실행하려고 할 때마다 예를 들어,git log,git status등(물론, 어떤 명령도 불리지 않았다는 것을 의미합니다._of_ProductSearchQuery존재합니다.

사이드 노트

[...] 동일한 오류가 발생합니다.

git:176: command not found: _of_ProductSearchQuery

(뒤에 숫자 포함)git명령을 입력할 때마다 증가)

그 숫자는 단순히 다음과 같은 값에 해당합니다.HISTCMD가 유지되는 환경 변수

대화형 셸의 현재 기록 이벤트 번호, 즉, 원인이 된 명령의 이벤트 번호$HISTCMD열람할 수 있는

자세한 내용은 zsh 설명서를 참조하십시오.

해결책

어떻게 하면 정상으로 돌아갈 수 있을까요?

문제가 있는 셸 함수(및 사용자가 문제가 있는 동안 실수로 생성한 다른 두 개)를 삭제하기만 하면 됩니다.

unset -f git
unset -f branch SSLOC-201_Implement___str__

그러면 모든 것이 잘 될 것입니다.

면 어쩌지unset그림자도?!

좋은 질문입니다!Wumpus W를 소개합니다. 아래에 있는 Wumblemy의 훌륭한 코멘트.


지점 이름 지정 팁

특수 셸 문자를 사용하지 않도록 합니다.

예, 설명에서 지적한 대로 괄호는 Git 분기 이름에서 유효한 문자입니다. 예를 들어, 이름을 적절하게 따옴표로 묶기만 하면 됩니다.

$ git branch 'foo()bar'
$ git branch
  foo()bar
* master
$ git checkout 'foo()bar'
Switched to branch 'foo()bar'

그러나 명령줄 인수로 사용될 때마다 이러한 이름을 따옴표로 묶어야 하기 때문에 참조 이름의 괄호를 피할 수 있습니다.일반적으로 셸에 특별한 의미가 있는 문자는 (가능한 한) 피해야 합니다. 이와 같은 놀라움을 방지하기 위해서입니다.

단순 분기 이름 사용

어쨌든 지점 이름은 짧고 달콤하게 유지해야 합니다.다음과 같은 긴 설명

SSLOC-201_실시__str_()_of_상품검색조회

분기 이름이 아닌 커밋 메시지에 속합니다.

언급URL : https://stackoverflow.com/questions/32355540/complex-git-branch-name-broke-all-git-commands

반응형