나는 zsh와 함께 iTerm2를 사용해 왔으며 다음 별칭을 사용하면 새 iTerm2 창이나 탭을 열 때마다 오류가 발생합니다.
alias clear-git-branches="git fetch -p && for branch in `git branch -vv | grep ': gone]' | awk '{print $1}'`; do git branch -D $branch; done"
내가 얻는 오류는 다음과 같습니다.
fatal: not a git repository (or any of the parent directories): .git
git 저장소가 아닌 디렉토리와 관련된 오류가 발생하기 때문에 따옴표와 관련된 문제가 있는 것 같습니다. 변경해 보았지만 동일한 오류가 발생했습니다.
업스트림 없이 로컬 브랜치를 지우려면 이 명령을 사용합니다.
답변1
Kamil이 지적했듯이 작은 인용문 대신 큰따옴표를 사용하기 때문에 명령의 일부 부분이 구문 분석되어 별칭이 로드됩니다(예: 터미널에서 탭이나 창을 열 때).
모든 것이 한 번에 실행되기 때문에 터미널에서 실행하면 괜찮아 보입니다.
모든 것을 작은따옴표로 묶으면 문제가 해결되지만 내부 작은따옴표에 문제가 발생합니다. 대신 함수로 다시 작성하는 것이 좋습니다. 이 경우 별칭을 사용하는 것처럼 사용할 수 있습니다.
clear-git-branches() {
git fetch -p && \
for branch in $(git branch -vv | awk '/: gone]/{print $1}');
do git branch -D "${branch}";
done
}
답변2
내 다음과 유사하거나 동일한 문제가 있었습니다 .zshrc
.
# use gcm to checkout master or main
alias gcm="git checkout $(git remote show origin | grep 'HEAD branch' | sed 's/.*: //') && git pull"
새 iTerm2 창이나 터미널 창을 열거나 환경을 다시 로드하면 다음과 같은 결과가 나타납니다.
source ~/.zshrc
fatal: not a git repository (or any of the parent directories): .git
해당 줄을 주석 처리하면 문제가 해결되었습니다.
# alias gcm="git checkout $(git remote show origin | grep 'HEAD branch' | sed 's/.*: //') && git pull"
다시 쓴 후; 큰따옴표와 작은따옴표 바꾸기:
alias gcm='git checkout $(git remote show origin | grep "HEAD branch" | sed "s/.*: //") && git pull'
오류가 사라졌습니다.