基本上我想输入show
并检查是否有show
命令或别名已定义并触发它并且未定义它会触发git show
。
例如,rm
应该rm
但checkout
应该git checkout
。
是否可以在bashrc
?
答案 0 :(得分:4)
这非常简单:
master tmp$ trap 'git $BASH_COMMAND' ERR
master tmp$ touch foo
master tmp$ rm foo
master tmp$ add foo
bash: add: command not found
fatal: pathspec 'tmp/foo' did not match any files
master tmp$ branch
bash: branch: command not found
aix
allocators
...
这会运行通常的touch
和rm
命令,但由于没有add
命令,它运行git add foo
并且因为没有branch
命令运行git branch
trap命令在任何错误上运行,因此不仅在找不到命令时也是如此。您可能想要做一些更聪明的事情,例如运行一个脚本,检查$?
是否为127(代码bash在找不到命令时设置),然后检查是否使用git运行它(例如通过检查名为git-xxx
的命令xxx
是$BASH_COMMAND
)的第一个单词。我把它作为读者的练习。
答案 1 :(得分:2)
没有简单而恰当的方法来实现您的需求。我认为最好的做法是在~/.bashrc
中为每个git
命令创建一个别名。
但是在许多发行版中,如果你检查man git
,那么有一些主瓷命令看起来像别名。
您可以使用
列出所有这些内容PAGER= man git | grep -oP 'git-\w+(?=\()'
答案 2 :(得分:2)
当bash
无法找到命令时,它会调用command_not_found_handle
(如果已定义)。您可以将其定义为如下所示:
command_not_found_handle () {
git "$@" || { echo "$1 not a 'git' command either"; exit 127; }
}
答案 3 :(得分:0)
添加到您的~/.bashrc
:
alias show='git show'
alias checkout='git checkout'
...
注意不要为已经执行其他操作的命令创建别名。这可能会打破其他程序。
答案 4 :(得分:0)
这是获取所有git命令列表的一种方法:
git help -a | egrep '^ [a-zA-Z0-9]' | xargs -n1 | sed 's/--.*//' | sort -u
或者你可以使用contrib/completion/git-completion.sh
中的内容:(这可能更好,因为你可能会循环。注意:你需要考虑重复,但它们对{{{{{{ 1}})
alias