如何让git别名的bash完成工作?

时间:2018-06-02 13:17:43

标签: bash git bash-completion

我创建了git别名~/.gitconfig

[alias]
xxx = !bash -c 'git rebase ...'

但是当我在shell中输入git xxx TAB TAB 时,我得到当前目录中的文件列表,而不是{{1}的可用分支列表}} TAB TAB

有没有办法让git rebase 的bash自动完成,就像通常的别名一样:

git xxx

1 个答案:

答案 0 :(得分:2)

〜/ .bashrc中

_git_xxx ()
{
  _git_rebase
}

〜/的.gitconfig

[alias]
xxx = !bash -c 'git rebase ...'

例如_git_rebase看起来像这样(在 git-completion.bash 中找到 - 此文件的路径取决于您的系统,使用locate,{{1} },无论如何找到它):

find

复制此功能,重命名为_git_rebae () { __git_find_repo_path if [ -f "$__git_repo_path"/rebase-merge/interactive ]; then __gitcomp "--continue --skip --abort --quit --edit-todo" return elif [ -d "$__git_repo_path"/rebase-apply ] || \ [ -d "$__git_repo_path"/rebase-merge ]; then __gitcomp "--continue --skip --abort --quit" return fi __git_complete_strategy && return case "$cur" in --whitespace=*) __gitcomp "$__git_whitespacelist" "" "${cur##--whitespace=}" return ;; --*) __gitcomp " --onto --merge --strategy --interactive --preserve-merges --stat --no-stat --committer-date-is-author-date --ignore-date --ignore-whitespace --whitespace= --autosquash --no-autosquash --fork-point --no-fork-point --autostash --no-autostash --verify --no-verify --keep-empty --root --force-rebase --no-ff --exec " return esac __git_complete_refs } ,根据需要进行更改并将其放入_git_whatever,然后使用~/.bashrc从中创建别名。

完成将在__git_complete gwhat _git_whatever开箱即用,而不是git whatever<TAB><TAB>步骤。

要防止代码重复,您可以将别名完成绑定到现有代码:

__git_complete ...