Git自动完成自定义bash功能

时间:2017-10-11 19:33:45

标签: git bash bash-completion

在我的.bash_profile中,我有很多git的功能快捷方式。例如:

function gitpull() {
    branch="$1"

    if [[ -z $branch ]]; then
        current_branch=`git symbolic-ref -q --short HEAD`
        git pull origin $current_branch;
    elif [[ -n $branch && $branch == "m" ]]; then
        git pull origin master;
    else
        git pull origin $branch;
    fi;
}

然而,当我在终端中键入它时,我希望它能自动完成git分支。我该怎么做呢? (我已经在使用.git-completion.bash

3 个答案:

答案 0 :(得分:5)

手工制作的bash完成就像这样简单:

# our handler that returns choices by populating Bash array COMPREPLY
# (filtered by the currently entered word ($2) via compgen builtin)
_gitpull_complete() {
    branches=$(git branch -l | cut -c3-)
    COMPREPLY=($(compgen -W "$branches" -- "$2"))
}

# we now register our handler to provide completion hints for the "gitpull" command
complete -F _gitpull_complete gitpull

获取上述命令后:

$ gitpull <TAB>
asd     master  qwe     zxc
$ gitpull m<TAB>
$ gitpull master

关于bash完成的最终参考是(当然)bash手册中关于Programmable Completion的部分,但是对于#34; Debian Administration&#34;页面(part 1和更重要的part 2)。

答案 1 :(得分:0)

推荐的方法是使用__git_complete()

__git_complete gitpull _git_pull

答案 2 :(得分:0)

在 Git 2.31(2021 年第 1 季度)中,更新了 bash 补全(在 contrib/ 中),使最终用户可以更轻松地为其自定义“git”子命令添加补全。

感谢FelipeC(写了previous answer on that same page

请参阅 commit 5a067bacommit 0e02bdccommit 810df0ecommit 7f94b78Felipe Contreras (felipec)(2020 年 12 月 30 日)。
(于 2021 年 1 月 15 日在 Junio C Hamano -- gitster --commit f9fb906 合并)

<块引用>

completion:添加适当的公共 __git_complete

签字人:Felipe Contreras

<块引用>

__git_complete 被引入时,它是暂时的,同时为公共 shell 函数建立了适当的指南(暂定为 _GIT_complete),但由于那从未发生过,人们开始使用 __git_complete,即使它被标记为非公开。

等待八年已经足够了,让我们将此功能标记为公开,并使其更加人性化。

这样,而不是这样做:

__git_complete gk __gitk_main

用户可以:

__git_complete gk gitk

而不是:

__git_complete gf _git_fetch

做:

__git_complete gf git_fetch

保持向后兼容性。