Git pull 自动完成 OSX

Git pull 自动完成 OSX

按照此网站上的一些说明进行操作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”相同的逻辑。这意味着它将寻找本地分支名称而不是远程分支。)

相关内容