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