Como obter o git-completion.bash para funcionar no Mac OS X?

89

Eu segui link para adicione git-completion.bash ao meu /opt/local/etc/bash_completion.d/git-completion

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

Mas agora estou recebendo este -bash: __git_ps1: command not found de tudo o que faço cd .

Você pode me dizer o que estou perdendo?

    
por n179911 29.08.2009 / 02:49

14 respostas

65

Eu instalei o git usando MacPorts na minha nova instalação do Snow Leopard. Depois que o MacPorts é instalado a partir da imagem .dmg, esses seriam os comandos no Terminal.app:

sudo port selfupdate
sudo port install git-core +bash_completion

Se você também quiser suporte para extrair repositórios e documentos do 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:

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

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

# MacPorts Bash shell command completion
if [ -f /opt/local/etc/profile.d/bash_completion.sh ]; then
  . /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 ]; then
    . /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_VERSION para ver se esse é o problema. Em caso afirmativo, digite MacPorts bash digitando bash e tente concluir novamente.

    
por 30.08.2009 / 10:03
55

Se você instalou o git usando homebrew do que você pode ajustar um pouco o conselho do MacPorts e adicioná-lo ao seu .bash_profile e .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 você tem o git corretamente instalado usando o homebrew é para executar

brew info git

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

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
    
por 21.06.2011 / 21:39
26

Tudo o que você precisa fazer é colocar o arquivo git-completion.bash no diretório homebin do usuário e colocar o seguinte em você .profile ou .bash_profile file:

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

O que isto faz é certificar-se de que seu bin local está no PATH e o comando source faz as coisas funcionarem. Então, é claro, a alteração do PS1 coloca a ramificação atualmente registrada no prompt.

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

    
por 27.05.2010 / 07:39
13

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

O atual pacote bash-completion (2.0 r1) requer pelo menos uma bash 4.1 para funcionar corretamente. Como um terminal usual do OS X usa /bin/bash , ele só recebe um 3.x. Você precisa alterar suas configurações de terminal para usar /opt/local/bin/bash -l conforme descrito na documentação do MacPorts aqui: link

    
por 19.07.2012 / 10:49
6

Você precisa criar as funções de conclusão de comandos. Adicione ao seu .bashrc_profile antes do PS1:

. /opt/local/etc/bash_completion.d/git-completion
    
por 29.08.2009 / 03:19
5

Irritantemente isso foi quebrado novamente. Desta vez é o git pessoal 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 atrasar as coisas), elas refatoraram a funcionalidade de prompt de bash_completion / git e em seu próprio arquivo git-prompt.sh.

Portanto, adicionar bash_completion conforme descrito por @Lara só lhe dará conclusão (a aba de acesso completa os nomes de tag / branch).

Para obter o __git_ps1 para que você possa usá-lo no seu prompt do PS1, você também precisa adicionar o seguinte ao seu ~ / .profile.

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

Algumas informações básicas estão aqui - link

    
por 21.09.2012 / 02:15
3

Ou com o Homebrew

brew install bash-completion git-extras
    
por 16.01.2013 / 05:18
2

Encontrou uma solução em uma pergunta semelhante :

O git-osx-installer vem com git-completion.bash e o instala em /usr/local/git/contrib/completion/ . Basta pesquisar esse arquivo do seu .bash_profile para obter __git_ps1 .

    
por 08.07.2012 / 20:07
2

Para Mountain Lion e Mac-Ports, precisei usar as seguintes linhas no meu .bash_profile para que ambas __git_ps1 e completions fossem executadas 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
    
por 07.12.2012 / 07:32
1

Eu uso brew, então um script master bash_completion que executa todos os que estão em bash_completion.d parece não ser fornecido. As soluções que propõem apenas executar um único script para adicionar completações git não são extensíveis, porque diferentes pacotes irão adicionar diferentes scripts de conclusão, e você provavelmente quer executá-los todos. Por isso, 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
    
por 03.10.2012 / 16:18
1

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

Adicione isso ao seu .bashrc:

source 'xcode-select -p'/usr/share/git-core/git-completion.bash
    
por 16.08.2015 / 16:55
0

Além do post 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

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

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

    
por 03.09.2010 / 06:54
0

Embora a resposta acima do grundprinzip de 2011 ainda funcione bem, eu queria adicionar uma resposta mais recente agora que agora há um pacote Homebrew bash-completion ( fórmula , repo ) que torna isso ainda mais fácil. (Isso inclui a conclusão do git e de outras ferramentas comuns.)

Hoje o macOS vem com o Bash 3, mas você pode usar brew install bash para obter o Bash 4. Se você estiver executando o Bash 4, instale o novo branch 2.x do bash-completion.

Bash 4

  1. Executar:

    brew install bash-completion@2
    
  2. Adicione 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ê quiser ficar com o estoque bash 3.x no macOS, siga estas instruções.

  1. Executar:

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

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

Referência: link

    
por 08.03.2018 / 01:41
-2

Acho que você talvez esqueça de fazer o sourcing do 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.

    
por 24.04.2010 / 12:38

Tags