在我的.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
)
答案 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 5a067ba 的 commit 0e02bdc、commit 810df0e、commit 7f94b78、Felipe 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
保持向后兼容性。