1

Следуйте инструкциям на этом сайте http://denis.tumblr.com/post/71390665/adding-bash-completion-for-git-on-mac-os-x-leopard . Я могу сделать git auto complete для MAC OS. Тем не менее, когда я набираю 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 ответ1

2

Это необходимо по замыслу. Когда вы выполняете 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". Это означает, что он будет искать локальные имена ветвей вместо удаленных.)

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .