Como fazer com que o git-complete.bash funcione no Mac OS X?


92

Segui http://blog.bitfluent.com/post/27983389/git-utilities-you-cant-live-without para adicionar git-completion.bashao meu/opt/local/etc/bash_completion.d/git-completion

e eu coloquei PS1='\h:\W$(__git_ps1 "(%s)") \u\$ 'no meu .bashrc_profile

Mas agora estou recebendo -bash: __git_ps1: command not foundtudo o que faço cd.

Você pode me dizer o que estou perdendo?


Respostas:


65

Instalei o git usando o MacPorts na minha nova instalação do Snow Leopard. Após a instalação do MacPorts a partir da imagem .dmg, estes seriam os comandos no Terminal.app:

sudo port selfupdate
sudo port install git-core +bash_completion

Se você também deseja suporte para receber repositórios e documentos SVN, use isso em vez da segunda linha:

sudo port install git-core +bash_completion +doc +svn

Em seguida, adicione o seguinte ao seu ~ / .profile ou ~ / .bash_profile:

# Conclusão do comando shell MacPorts Bash
se [-f / opt / local / etc / bash_completion]; então
    . / opt / local / etc / bash_completion
fi

ou para MacPorts desde a versão 2.1.2 no Mountain Lion:

# Conclusão do comando shell MacPorts Bash
if [-f /opt/local/etc/profile.d/bash_completion.sh]; então
  . /opt/local/etc/profile.d/bash_completion.sh
fi

ou para MacPorts com versões mais recentes do git:

if [-f /opt/local/share/git-core/git-prompt.sh]; então
    . /opt/local/share/git-core/git-prompt.sh
fi

Nota: o bash 4.1 ou superior é requerido pelo bash_completion.sh. Se a conclusão não funcionar, tente echo $BASH_VERSIONverificar se esse é o problema. Nesse caso, digite MacPorts bash digitando bashe tente a conclusão do git novamente.


Acabei de copiar colado e ainda recebo o erro do OP. = \. Como você diz o que foi incluído? Eu não thenk bash_completion é originária
NullVoxPopuli

note que com as versões mais recentes do git / macport / bash-complete, o prompt está em um arquivo diferente. Veja: trac.macports.org/ticket/36334 if [ -f /opt/local/share/git-core/git-prompt.sh ]; then . /opt/local/share/git-core/git-prompt.sh fi
Yehosef 22/10/12

3
Como /opt/local/etc/profile.d/bash_completion.shprecisa do $BASH_VERSION4.1 ou superior, tive que fazer o seguinte em um Mac OS X 10.8.3 com MacPorts 2.1.3: Alterne o shell de login do Mac OS X do seu padrão /bin/bash(liberação de 3.2.48 (1)) para MacPorts /opt/local/bin/bash(4.2 .42 (2) -release) como descrito aqui: stackoverflow.com/a/791244/287984. Basicamenteif [ `grep /opt/local/bin/bash /etc/shells` ]; then echo /opt/local/bin/bash | chsh -s /opt/local/bin/bash; else echo /opt/local/bin/bash | sudo tee -a /etc/shells; chsh -s /opt/local/bin/bash; fi
Uwe Günther

Funcionou muito bem para mim. Teve que substituir /bin/bashno Terminal.app /opt/local/bin/bashpelo macports + todas as .bash_profilealterações sugeridas aqui.
BGS

1
Para ir para o bash 4.1 ou posterior, você pode seguir as instruções aqui: apple.stackexchange.com/questions/70132/…
ThomasW

55

Se você instalou o git usando homebrew, poderá ajustar um pouco os conselhos do MacPorts e adicioná-los ao seu .bash_profilee.bashrc

if [ -f `brew --prefix`/etc/bash_completion.d/git-completion.bash ]; then
. `brew --prefix`/etc/bash_completion.d/git-completion.bash
fi

A melhor maneira de verificar se o git foi instalado corretamente usando o homebrew ist para executar

brew info git

e verifique a saída para o diretório de instalação da conclusão do git bash

A versão mais recente do Git (1.7.12) também requer o seguinte para ativar o prompt.

if [ -f `brew --prefix`/etc/bash_completion.d/git-prompt.sh ]; then
    . `brew --prefix`/etc/bash_completion.d/git-prompt.sh
fi

Para mais informações __git_ps1, consulte superuser.com/a/477749/90231 resposta nesta pilha.
RichVel

26

Tudo o que você precisa fazer é colocar o git-completion.basharquivo no bindiretório inicial do usuário e colocar o seguinte em você .profileou no .bash_profilearquivo:

export PATH="$HOME/bin:$PATH"
source ~/bin/git-completion.bash
PS1='[\u@\h \w$(__git_ps1 " (%s)")]\$ '

O que isso faz é garantir que sua lixeira local esteja no PATH e o sourcecomando faça as coisas funcionarem. Então, é claro, a alteração PS1 coloca a ramificação com check-out atualmente no prompt.

Portanto, nenhum MacPort é instalado para instalar a versão "conclusão" do GIT (especialmente irritante se você já o tiver instalado).



1
Para aqueles que querem saber como combinar essa coisa PS1 com cores em seu veja prompt: stackoverflow.com/questions/816790/...
Nickolay

1
Mais precisamente, o git-conclusão.bash só precisa estar em algum lugar no seu $PATH. Decidi colocar o meu /usr/local/bin/para que eu não tivesse que modificar o meu existente $PATH.
metavida

13

Embora a resposta atual esteja correta para MacPorts mais antigos, há um novo problema com os MacPorts mais atuais, resultando no mesmo erro.

O pacote atual de conclusão do bash (2.0 r1) requer pelo menos um 4.1 do bash para funcionar corretamente. Como o OS X Terminal usa, /bin/bashele recebe apenas uma versão 3.x. Você precisa alterar as configurações do terminal para usar /opt/local/bin/bash -lcomo descrito na documentação do MacPorts aqui: http://trac.macports.org/wiki/howto/bash-completion


Esta é a resposta mais correta, pois só comecei a ter o problema após atualizar o macports. A única desvantagem de usar o macports bash do terminal é que agora ele me avisa sobre o término dos processos em execução quando tento fechar minha janela do terminal - você já se deparou com isso?
vitch


5

Irritantemente isso foi quebrado mais uma vez. Desta vez, é o pessoal do git com a versão 1.7.12-1. Para permitir que as pessoas tenham apenas a funcionalidade de prompt sem a funcionalidade de conclusão (o que pode tornar as coisas mais lentas), elas refatoraram a funcionalidade de prompt do bash_completion / git e em seu próprio arquivo git-prompt.sh.

Portanto, adicionar bash_completion, conforme descrito por @Lara, fará com que você seja completado (a tecla H1 completa os nomes de tags / ramificações).

Para obter o __git_ps1que você pode usar no prompt do PS1, você também precisa adicionar o seguinte ao seu perfil ~ /.

. /opt/local/share/doc/git-core/contrib/completion/git-prompt.sh

Alguns antecedentes estão aqui - https://bbs.archlinux.org/viewtopic.php?pid=1163632#p1163632



3

Ou com Homebrew

brew install bash-completion git-extras

2
Muito obrigado. Deve ser brew install bash-completion git-extrasembora (traço em vez de sublinhado).
21613 simonair


2

Para Mountain Lion e Mac-Ports, eu precisava usar as seguintes linhas no meu .bash_profile para obter __git_ps1 e conclusões para executar normalmente:

# Bash shell command completion
if [ -f /opt/local/share/doc/git-core/contrib/completion/git-completion.bash ]; then
  . /opt/local/share/doc/git-core/contrib/completion/git-completion.bash
fi

if [ -f /opt/local/share/doc/git-core/contrib/completion/git-prompt.sh ]; then
  . /opt/local/share/doc/git-core/contrib/completion/git-prompt.sh
fi

1

Eu uso o brew, portanto, um bash_completionscript mestre que executa todos os itens bash_completion.dparece não ser fornecido. As soluções que propõem apenas a execução de um único script para adicionar conclusões git não são extensíveis, porque pacotes diferentes adicionam scripts de conclusão diferentes e você provavelmente deseja executá-los todos. Portanto, eu adicionei isso (adaptado do Arch Linux) ao final de /etc/bashrc:

# source compat completion directory definitions
BASH_COMPLETION_COMPAT_DIR=/usr/local/etc/bash_completion.d
if [[ -d $BASH_COMPLETION_COMPAT_DIR && -r $BASH_COMPLETION_COMPAT_DIR && \
    -x $BASH_COMPLETION_COMPAT_DIR ]]; then
    for i in $(LC_ALL=C command ls "$BASH_COMPLETION_COMPAT_DIR"); do
        i=$BASH_COMPLETION_COMPAT_DIR/$i
        [[ -f $i && -r $i ]] && . "$i"
    done
fi

1

Pelo menos com o Xcode 6, você já possui git-completion.bash. Está dentro do pacote de aplicativos do Xcode.

Basta adicionar isso ao seu .bashrc:

source `xcode-select -p`/usr/share/git-core/git-completion.bash

Esta foi a única resposta que realmente funcionou para mim. Outras respostas estavam produzindo erros estranhos quando você digita um comando incompleto comogit br<TAB>
r00m

0

Além da publicação de Adam K. Johnson

Você também pode colocar o seguinte ...

# MacPorts Bash shell command completion
if [ -f /opt/local/etc/bash_completion ]; then
    . /opt/local/etc/bash_completion
fi

... em seu / etc / profile, se você quiser.

Dessa forma, todos os usuários do sistema se beneficiarão com os scripts de conclusão do bash instalados no diretório "/opt/local/etc/bash_completion.d/".


0

Embora a resposta acima do grundprinzip de 2011 ainda funcione bem, eu gostaria de adicionar uma resposta mais recente agora que agora existe um pacote de conclusão do Homebrew ( fórmula , repo ) que torna isso ainda mais fácil. (Isso inclui a conclusão do git, além de outras ferramentas comuns.)

Hoje, o macOS é fornecido com o Bash 3, mas você pode brew install bashobter o Bash 4. Se você estiver executando o Bash 4, instale o ramo 2.x mais recente da conclusão do bash.

Bash 4

  1. Corre:

    brew install bash-completion@2
  2. Adicionar a ~/.bash_profile:

    if [ -f /usr/local/share/bash-completion/bash_completion ]; then
      . /usr/local/share/bash-completion/bash_completion
    fi

Bash 3

Se você deseja manter o estoque bash 3.x no macOS, siga estas instruções.

  1. Corre:

    brew install bash-completion
  2. Adicionar a ~/.bash_profile:

    echo "[ -f /usr/local/etc/bash_completion ] && . /usr/local/etc/bash_completion" >> ~/.bash_profile

Referência: http://davidalger.com/development/bash-completion-on-os-x-with-brew/


-2

Eu acho que você talvez esqueça de buscar o arquivo no seu login .bashrc, você pode adicionar algo como:

. ./path/to/your/file.ext

Usar .seguido por um espaço executa o arquivo no contexto atual.

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.