我有~/bin/git-continue
腳本~/bin/git-abort
,如下:
#!/bin/bash
repo_path=$(git rev-parse --git-dir)
if [ $? -ne 0 ]; then
exit $?
fi
if [ -d "${repo_path}/rebase-merge" ]; then
git rebase --continue
elif [ -d "${repo_path}/rebase-apply" ]; then
git rebase --continue
elif [ -f "${repo_path}/MERGE_HEAD" ]; then
git merge --continue
elif [ -f "${repo_path}/CHERRY_PICK_HEAD" ]; then
git cherry-pick --continue
elif [ -f "${repo_path}/REVERT_HEAD" ]; then
git revert --continue
else
echo "No something in progress?"
fi
我還通過將其放入以下目錄~/bin
來放置目錄:PATH
~/.bashrc
[[ ":$PATH:" != *":~/bin:"* ]] && PATH="~/bin:${PATH}"
export PATH
因此,我檢查$ git-continue
工作正常,但git continue
輸出以下錯誤:
git: 'continue' is not a git command. See 'git --help'.
我可以透過什麼查找導致此錯誤的可能原因?
答案1
您的PATH
包含未展開的~/bin
.您的 shell 理解其~/
含義,但git
顯然不理解。您應該在~/bin
您的PATH
.
如果您使用PATH=~/"bin:${PATH}"
而不是PATH="~/bin:${PATH}"
,則會發生波形符擴展並PATH
儲存擴展的路徑。但:~/bin:
裡面有問題[[ ]]
。不引用波形符並不是唯一的條件(請參閱 參考資料中的「波形符擴充」man 1 bash
),這使得擴充變得:~/bin:
困難。並且您需要擴展它以針對 中的完整路徑進行測試PATH
。
使用起來更容易$HOME
:
[[ ":$PATH:" != *":$HOME/bin:"* ]] && PATH="$HOME/bin:${PATH}"
export PATH
$HOME
在將整個字串分配給變數之前先進行擴展PATH
。這意味著PATH
現在包含滿的到你的$HOME/bin
.git
就會明白這條路。
答案2
你可以創建一個自訂別名為了解決這個問題。使用別名可能會更好,因為對於那些不知道您的自訂並且您當前沒有處理命令中的任何內容而只想運行一系列命令的人來說,調試起來會更容易。
也可以看看如何將 bash 腳本直接嵌入到 git 別名中在 StackOverflow 上。