我一直在使用 iTerm2 和 zsh,並且使用以下別名,每次打開新的 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
正如卡米爾指出的,由於您使用雙引號而不是單引號,因此命令的某些部分被解析,別名正在加載(即當您在終端中打開選項卡或視窗時)。
當您在終端中運行它時,它看起來不錯,因為所有內容都會立即執行。
將所有內容放在單引號中可以解決問題,但會引入內部單引號的問題。我建議將其重寫為函數。在這種情況下,您可以像使用別名一樣使用它。
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'
錯誤消失了。