PATH 中的 Git 自訂指令不起作用

PATH 中的 Git 自訂指令不起作用

我有~/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 上。

對於任何有興趣的人來說,目前關於此行為的唯一文件似乎位於來源按照那麼問題git-scm問題

相關內容