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/bingit将会理解这条路径。

答案2

您可以创建一个自定义别名以解决这个问题。使用别名可能更好,因为对于不知道您的自定义并且您当前没有处理命令中的任何内容而只想运行一系列命令的人来说,这将更容易调试。

也可以看看如何将 bash 脚本直接嵌入到 git 别名中在 StackOverflow 上。

对于任何感兴趣的人,似乎目前关于这种行为的唯一文档是在来源按照那么问题来了git-scm 问题

相关内容