web-dev-qa-db-pt.com

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

Eu tenho seguido http://blog.bitfluent.com/post/27983389/git-utilities-you-cant-live-without para adicionar 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 eu estou recebendo este -bash: __git_ps1: command not found tudo que eu faço um cd.

Você pode por favor me dizer o que estou perdendo?

91
n179911

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

Sudo port selfupdate
Sudo port install git-core +bash_completion

Se você também quiser suporte para extrair dos 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 Conclusão do comando Bash Shell 
 If [-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:

# MacPorts Conclusão do comando Bash Shell 
 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 novas 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 por bash_completion.sh. Se a conclusão não funcionar, tente echo $BASH_VERSION para ver se esse é o problema. Em caso afirmativo, insira MacPorts bash digitando bash e tente concluir o git novamente.

65
Lara Dougan

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 para o 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
55
grundprinzip

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

export PATH="$HOME/bin:$PATH"
source ~/bin/git-completion.bash
PS1='[\[email protected]\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).

26
iansheridan

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ê tem que alterar as configurações do terminal para usar /opt/local/bin/bash -l conforme descrito na documentação do MacPorts aqui: http://trac.macports.org/wiki/howto/bash-completion

13
Andy

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
6
jtimberman

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 Prompt sem a funcionalidade de conclusão (o que pode atrasar as coisas), elas refatoraram a funcionalidade Prompt do bash_completion/git e para o seu próprio arquivo git-Prompt.sh.

Então, adicionando bash_completion conforme descrito por @Lara, você só receberá a 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 PS1 Prompt, você também precisa adicionar o seguinte ao seu ~/.profile.

. /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

5
studgeek

Ou com Homebrew

brew install bash-completion git-extras
3
derek73

Encontrei uma solução em um pergunta semelhante :

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

2
John Mellor

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
2
haysclark

Eu uso brew, então um script master bash_completion que executa todos os 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
1
ecloud

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

Apenas adicione isto ao seu .bashrc:

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

Além da postagem 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/".

0
thekingoftruth

Enquanto a resposta acima do grundprinzip de 2011 ainda funciona bem, eu queria adicionar uma resposta mais recente agora que agora há um pacote Homebrew bash-completion ( formula , 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 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. Corre:

    brew install [email protected]
    
  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. Corre:

    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: http://davidalger.com/development/bash-completion-on-os-x-with-brew/

0
Taylor Edmiston