按照此网站上的一些说明进行操作http://denis.tumblr.com/post/71390665/adding-bash-completion-for-git-on-mac-os-x-leopard。我可以为 MAC OS 执行 git 自动完成。但是,当我输入 git pull origin ma(表示 master)然后按 Tab 键时,git 自动完成需要很长时间才能变成git pull origin master
。我认为它连接到服务器以获取分支,但我不确定,有没有办法让它更快并且只在本地机器上获取分支
cd /tmp
git clone git://git.kernel.org/pub/scm/git/git.git
cd git
git checkout v`git --version | awk '{print $3}'`
cp contrib/completion/git-completion.bash ~/.git-completion.bash
cd ~
rm -rf /tmp/git
echo -e "source ~/.git-completion.bash" >> .profile
答案1
这是设计所必须的。当您执行 时git-pull
,您从中拉取的分支名称是远程分支。它别无选择,只能联系远程存储库以获取可能的完成列表。
如果您尝试自动完成git-push
命令,您可以亲自证明这一点。完成分支名称master
会快得多,因为您正在推送本地分支,因此您无需联系远程存储库。
如果你想让自动完成功能始终使用本地分支名称完成,那么你能改变行为。 这可能仅当您的本地分支名称与远程分支名称相同时才有用。编辑文件~/.git-completion.bash
并在第 458 行附近查找以下代码:
fetch)
if [ $lhs = 1 ]; then
__gitcomp "$(__git_refs2 "$remote")" "$pfx" "$cur"
else
__gitcomp "$(__git_refs)" "$pfx" "$cur"
fi
;;
pull)
if [ $lhs = 1 ]; then
__gitcomp "$(__git_refs "$remote")" "$pfx" "$cur"
else
__gitcomp "$(__git_refs)" "$pfx" "$cur"
fi
;;
push)
if [ $lhs = 1 ]; then
__gitcomp "$(__git_refs)" "$pfx" "$cur"
else
__gitcomp "$(__git_refs "$remote")" "$pfx" "$cur"
fi
;;
esac
...并将其更改为:
fetch)
if [ $lhs = 1 ]; then
__gitcomp "$(__git_refs)" "$pfx" "$cur"
else
__gitcomp "$(__git_refs "$remote")" "$pfx" "$cur"
fi
;;
pull)
if [ $lhs = 1 ]; then
__gitcomp "$(__git_refs)" "$pfx" "$cur"
else
__gitcomp "$(__git_refs "$remote")" "$pfx" "$cur"
fi
;;
push)
if [ $lhs = 1 ]; then
__gitcomp "$(__git_refs)" "$pfx" "$cur"
else
__gitcomp "$(__git_refs "$remote")" "$pfx" "$cur"
fi
;;
esac
(请注意,我们已将“fetch”和“pull”部分更改为使用与“push”相同的逻辑。这意味着它将寻找本地分支名称而不是远程分支。)