【发布时间】:2015-06-08 09:59:01
【问题描述】:
我正在尝试实现我自己版本的 git-extras'git delete-branch。
#!/usr/bin/env bash
# Assert there is at least one branch provided
test -z $1 && echo "branch required." 1>&2 && exit 1
for branch in "$@"
do
remote=$(git config branch.$branch.remote)
test -z $remote && remote="origin"
ref=$(git config branch.$branch.merge)
test -z $ref && ref="refs/heads/$branch"
git branch -D $branch
git branch -d -r $remote/$branch
git push $remote :$ref
done
取自这里:https://github.com/tj/git-extras/blob/master/bin/git-delete-branch
当然,如果我们没有使用它完成分支,那将没有多大意义,这由以下代码表示:
_git_delete_branch(){
__gitcomp "$(__git_heads)"
}
取自这里:https://github.com/tj/git-extras/blob/master#L_51/etc/bash_completion.sh
在安装 git-extras 以尝试该代码后,它工作得很好,但正如我在问题中所说,我想实现自己的方式,因为我想检查分支是否集成在 stable在删除它们之前。
由于我不想将我的脚本放在bash_completion.d 文件夹中,我创建了这个脚本:
#!/bin/bash
_delete_git_branch(){
__gitcomp "$(__git_heads)"
}
complete -o bashdefault -o default -o nospace -F _delete_git_branch delete_git_branch
通过source 包含在我的~/.bash_profile 中。
如果我现在在终端中输入delete_git_branch [TAB][TAB],我会得到我的分支。
但是,如果我尝试通过键入 delete_git_branch 1[TAB][TAB] 来限制完成的结果,我会得到与第一个完全相同的结果。
我想我错过了这里传递的一些参数,但我不确定。
你能想到我错过了什么吗?
我看不出我的脚本和 git-extras 使用的脚本之间的区别,除了使用 bash_completion.d 文件夹而不是 complete 命令。
【问题讨论】:
标签: git bash completion