私は 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'
エラーは消えました。