(Mac) -bash: __git_ps1: comando não encontrado


222

Estou tentando alterar meu prompt de comando no terminal. Eu continuo recebendo o erro:

-bash: __git_ps1: command not found

Já fiz apenas digitando-a no terminal como é: __git_ps1. Eu também tentei no.bash_profile

if [ -f ~/.git-completion.bash ]; then
  source ~/.git-completion.bash
  export PS1='[\W]$(__git_ps1 "(%s)"): '
fi

Como você pode ver / avisar, sim, eu tenho o preenchimento automático instalado e funciona muito bem!

Me deparei com esta pergunta: "A variável env PS1 não funciona no mac ", que fornece o código

alias __git_ps1="git branch 2>/dev/null | grep '*' | sed 's/* \(.*\)/(\1)/'"

Então eu adiciono isso à minha .bash_profileesperança de que isso mude alguma coisa. Bem, sim. Apenas mudou a saída de erro.

Aqui está o .bash_profilecom a adição:

alias __git_ps1="git branch 2>/dev/null | grep '*' | sed 's/* \(.*\)/(\1)/'"

if [ -f ~/.git-completion.bash ]; then
  source ~/.git-completion.bash
  export PS1='[\W]$(__git_ps1 "(%s)"): '
fi

E agora, aqui está a saída de erro alterada:

sed: (%s): No such file or directory

Nota: Também mudei o alias abaixo da fonte sem diferença. Eu tenho a versão 1.7.12.1 do git

Isso deve ser uma mudança simples. Alguém por favor pode me ajudar?

Editar 13/10/12

Não, eu definitivamente não quero definir __git_ps1, mas estava apenas tentando ver se isso seria reconhecido. Sim, eu tenho o .git-completion.basharquivo instalado. Eis como obtive a conclusão automática na minha máquina.

cd ~
curl -OL https://github.com/git/git/raw/master/contrib/completion/git-completion.bash
mv ~/git.completion.bash ~/.git-completion.bash

A ls -laentão lista o .git-completion.basharquivo.

Edit 13/10/12 - Resolvido por Mark Longair (abaixo)

O código a seguir funcionou para mim .bash_profileenquanto outros não ...

if [ -f ~/.git-prompt.sh ]; then
  source ~/.git-prompt.sh
  export PS1='Geoff[\W]$(__git_ps1 "(%s)"): '
fi

Meu git-completion.bashdefine __git_ps1como uma função shell. O seu? Como você sabe que a conclusão está funcionando? O que acontece quando você digita git h<TAB>?
Rob mayoff

Quando eu digito isso, ele acaba com git ajuda [espaço]
Geoff

A resposta aceita é boa, mas o prompt também pode ser ativado pressionando git <tab>conforme observado no commit referido por Mark Longair.
Jack Frost

Essa não é apenas uma boa pergunta explicada, mas também um recurso útil que orienta a solução. Um bem merecido voto positivo.
Yannis Dran

A verificação -f funcionou para corrigir esse erro ao executar o bash dentro da tela (1) no OS X 10.8.5. Não sei por que, já que o arquivo existia independentemente, mas não obstante, obrigado!
Nick K9

Respostas:


324

Você instalou a versão do git-completion.bashfrom master- no histórico de desenvolvimento do git, após uma confirmação que dividiu a __git_ps1função da funcionalidade de conclusão em um novo arquivo ( git-prompt.sh). O commit que introduziu essa mudança, que explica a lógica, é af31a456 .

Eu ainda sugeriria que você apenas obtivesse a versão do git-completion.bash(ou git-prompt.sh) incluída na sua instalação do git.

No entanto, se por algum motivo você ainda quiser usar essa funcionalidade usando scripts baixados separadamente master, faça o download da git-prompt.shmesma forma:

curl -o ~/.git-prompt.sh \
    https://raw.githubusercontent.com/git/git/master/contrib/completion/git-prompt.sh

... e adicione a seguinte linha ao seu ~/.bash_profile:

source ~/.git-prompt.sh

Então sua PS1variável que inclui __git_ps1 '%s'deve funcionar bem.


Você está certo que eu não quero definir __git_ps1. Eu estava apenas tentando ver se isso o reconheceria e não. Eu tenho .git-conclusão.bash na minha raiz. Eu vou atualizar a minha pergunta acima para incluir como eu tenho trabalho auto conclusão ...
Geoff

@ designer84: obrigado pela informação extra - acho que agora está claro qual é o problema e atualizei minha resposta com uma explicação.
Mark Longair

Por que isso não funciona? if [-f /usr/local/git/contrib/completion/git-completion.bash]; em seguida, origem /usr/local/git/contrib/completion/git-completion.bash export PS1 = '[\ W] $ (__ git_ps1 "(% s)"):' fi
Geoff

5
No OSX 10.9 com git 1.8.5.3 instalado através Homebrew, tanto git-prompt.she git-completion.bashsão encontrados em `brew --prefix git`/etc/bash_completion.d/.
Dokkaebi

1
Em MacPorts, o caminho mudou quando o pacote git-corefoi substituído por git, consulte esta pergunta
Ramon de la Fuente

60

Após a atualização para o OSX 10.9 Mavericks, tive que fazer referência aos seguintes arquivos para obter a conclusão do comando git shell e o prompt do git para trabalhar novamente.

Do meu .bash_profile ou similar:

if [ -f /Applications/Xcode.app/Contents/Developer/usr/share/git-core/git-completion.bash ]; then
    . /Applications/Xcode.app/Contents/Developer/usr/share/git-core/git-completion.bash
fi

source /Applications/Xcode.app/Contents/Developer/usr/share/git-core/git-prompt.sh

#shell prompt example
PS1='\u $(__git_ps1 "(%s)")\$ '

Este foi também o meu problema em OSV 10,9
jeremyjjbrown

Embora a resposta aceita por @marklongair seja uma boa descrição, encontrei esta pergunta através de uma pesquisa no Google de uma mensagem de erro (após a atualização para o OS 10.10) e esta resposta é a solução mais simples para o meu problema (simplesmente alterando o caminho para o novo local )
#RedBassett

Isso funcionou para mim na versão 10.10.5 Yosemite, no entanto, mudei a localização do git-prompt para ~/.git_prompt.sh. As outras soluções não funcionaram.
Rein

Eu adicionei suas linhas sugeridas ao .bash_profile , mas ainda estou recebendo o erro:bash: __docker_machine_ps1: command not found
IgorGanapolsky

43

Você deve

$ brew install bash bash-conclusão git

Em seguida, digite "$ (brew --prefix) / etc / bash_completion" no seu .bashrc.


Ótima resposta, definitivamente a melhor maneira de instalar o git com o brew. Mas eu acho que você precisa de fonte este: fonte $ (bebida --prefix) /etc/bash_completion.d/git-prompt.sh
febLey

1
@febLey Sim, o local foi alterado. Eu atualizei a resposta. Obrigado.
Steven Shaw

Isso não funciona. Eu recebo erros: bash: /usr/local/etc/bash_completion.d/git-prompt.sh: permissão negada bash: __docker_machine_ps1: comando não encontrado
IgorGanapolsky

14

A seguir funcionou para mim como um encanto:

Execute o seguinte no seu Terminal:

curl -L https://raw.github.com/git/git/master/contrib/completion/git-prompt.sh > ~/.bash_git

Abrir / Criar bash_profile:

$ vi ~/.bash_profile

Adicione o seguinte ao arquivo:

source ~/.bash_git
export PS1='\[\033[01;32m\]os \[\033[01;34m\]\w $(__git_ps1 "[%s]")\$\[\033[00m\] '
export GIT_PS1_SHOWDIRTYSTATE=1
export GIT_PS1_SHOWUPSTREAM="auto"

Por fim, obtenha-o usando:

$ source ~/.bash_profile

Isso resolverá o problema de bash: __git_ps1: command not found.

Além disso, seu prompt será alterado para "os". Para alterar "os" para outra coisa, modifique a string "os" na linha PS1 de exportação.


Ainda recebo um erro sh -c "clear && / bin / bash" bash: __docker_machine_ps1: comando não encontrado toda vez que entro na CLI do Docker.
IgorGanapolsky

8

Solução para MacOS Sierra e git versão 2.10.1 <2017-2-06>

Etapa 1: instalar o Git

Você pode pular esta etapa se você já instalou o último git.

Faça o download do pacote git no navegador https://git-scm.com/download/

Nota: se você instalar com a curl [option] https://...opção de download, precisará garantir que seu sistema suporte SSL. Portanto, para quem está iniciando, baixar do navegador e instalar diretamente do instalador do git é muito mais fácil.

Verificação da instalação:
  • Mostre onde está seu diretório git em: which git
  • Mostre qual versão seu git atualmente é: git --versiona versão atual deve ser 2.10.1.

Etapa 2: adicione seu perfil git ao seu shell

  1. Abra seu perfil do shell:
    • nano ~/.bash_profileou nano ~/.bashrcDepende de onde está sua modificação.
  2. Adicione o seguinte código ao arquivo:
    • source /usr/local/git/contrib/completion/git-completion.bash
    • source /usr/local/git/contrib/completion/git-prompt.sh

Nota: o local de instalação do git mudou de opt / directory para usr / local / após a atualização do OSX para o El Capitain, e é por isso que algumas das respostas antigas acima não funcionam mais no MacOS Sierra.

  1. Adicione o seguinte código à sua configuração PS1:

    • Opção 1: adicione diretamente ao seu PS1: export PS1='\w$(__git_ps1 "(%s)") > '

      Prefiro essa abordagem simples, pois já sei o que .git-completion.bashhá no meu diretório pessoal e posso adicionar outro formato de prompt na frente dele. Aqui está o meu prompt pessoal para sua referência:export PS1='\t H#\! \u:\w$(__git_ps1 "{%s}") -->> '
    • Opção 2: adicionar um script de seleção

    if [-f ~ / .git-conclusão.bash]; então
          exportar PS1 = '\ w $ (__ git_ps1 "(% s)")>'
    fi
  2. Salve e use o perfil: source ~/.bash_profileousource ~/.bashrc

Agora você deve ver o prompt do git funcionando corretamente e mostra em qual filial você está agora.

5

Eu tive o mesmo problema ao atualizar para o Yosemite.

Eu apenas tive que modificar ~/.bashrcpara em source /usr/local/etc/bash_completion.d/git-prompt.shvez do caminho antigo.

em seguida, reencaminhe seu . ~/.bashrcpara obter o efeito.


5

Solução limpa High Sierra com cores!

Sem downloads. Sem fermentação. No Xcode

Basta adicioná-lo ao seu ~ / .bashrc ou ~ / .bash_profile

export CLICOLOR=1
[ -f /Library/Developer/CommandLineTools/usr/share/git-core/git-prompt.sh ] && . /Library/Developer/CommandLineTools/usr/share/git-core/git-prompt.sh
export GIT_PS1_SHOWCOLORHINTS=1
export GIT_PS1_SHOWDIRTYSTATE=1
export GIT_PS1_SHOWUPSTREAM="auto"
PROMPT_COMMAND='__git_ps1 "\h:\W \u" "\\\$ "'

4

O __git_ps1 para bash agora é encontrado em git-prompt.sh em /usr/local/etc/bash_completion.d no meu brew instalado git versão 1.8.1.5


2

isso funciona no OS 10.8 no .bash_profile

if [ -f ~/.git-prompt.sh ]; then
  source ~/.git-prompt.sh
  export PS1='YOURNAME[\W]$(__git_ps1 "(%s)"): '
fi

Não corrige o erro: bash: __docker_machine_ps1: comando não encontrado
IgorGanapolsky

2

Para macports, tive que adicionar: source /opt/local/share/git-core/git-prompt.shao meu ./profile


1
@IgorGanapolsky Acho que você não tem macports instalado? Simplesmente faça touch ~/.profile. Mas você obviamente precisa de um arquivo em: /opt/local/share/git-core/git-prompt.sh
velop

2

Se você deseja usar o Homebrew para atualizar o Git e deixar seu sistema desatualizado em geral (como eu fiz), talvez seja necessário atualizar o Homebrew primeiro (como por atualização de preparação) : Os seguintes arquivos da árvore de trabalho não rastreados seriam substituídos por mesclagem: thanks @ chris-frisina)

Primeiro, alinhe o Homebrew com a versão atual

origem do cd / usr / local
git fetch
git reset --hard origem / master

Atualize o Git:

atualização de fermentação git

Problema resolvido! ;-)


2

Pelo menos com o Xcode 6, você já tem 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

2
  1. Faça o download dos arquivos git-prompt.sh e git-conclusão.bash nesta conclusão do Git
  2. Renomeie os arquivos.
  3. Mova esses arquivos para o diretório inicial.
  4. Adicione o arquivo de origem ao arquivo .bash_profile

    source ~/git-completion0.bash
    source ~/git-prompt0.sh
    and four to trigger the code block.
    


1

Eu estava fazendo o curso sobre o Udacity para hub git e estava tendo esse mesmo problema. Aqui está o meu código final que faz funcionar corretamente.

# Change command prompt
alias __git_ps1="git branch 2>/dev/null | grep '*' | sed 's/* \ .   (.*\)/(\1)/'"

if [ -f ~/.git-completion.bash ]; then
  source ~/.git-completion.bash
  export PS1='[\W]$(__git_ps1 "(%s)"): '
fi

source ~/.git-prompt.sh
export GIT_PS1_SHOWDIRTYSTATE=1
# '\u' adds the name of the current user to the prompt
# '\$(__git_ps1)' adds git-related stuff
# '\W' adds the name of the current directory
export PS1="$purple\u$green\$(__git_ps1)$blue \W $ $reset"

Funciona! https://i.stack.imgur.com/d0lvb.jpg


0

Este funcionou para mim, e tem saída git colorida e um indicador no prompt se os arquivos foram alterados / adicionados, diretamente inseridos nele:

GIT_PS1_SHOWDIRTYSTATE=true

. /usr/local/Cellar/git/1.8.5.2/etc/bash_completion.d/git-completion.bash
. /usr/local/Cellar/git/1.8.5.2/etc/bash_completion.d/git-prompt.sh

PS1='\[\033[32m\]\u@\h\[\033[00m\]:\[\033[34m\]\w\[\033[31m\]$(__git_ps1)\[\033[00m\]\$ '

Certifique-se de usar o caminho correto! Eu usei o homebrew para instalar o git, use brew list gitpara obter o caminho para sua instalação atual.

Seria bom não usar um caminho codificado, mas não sei como obter o caminho para a instalação atual.

Mais informações aqui: http://en.newinstance.it/2010/05/23/git-autocompletion-and-enhanced-bash-prompt/


0

Para git, existem /Applications/Xcode.app/Contents/Developer/usr/share/git-core/git-prompt.sh. E por favor, veja /etc/bashrc_Apple_Terminaltambém.

Então, eu coloquei estes em ~/.bash_profile:

if [ -f /Applications/Xcode.app/Contents/Developer/usr/share/git-core/git-prompt.sh ]; then
  . /Applications/Xcode.app/Contents/Developer/usr/share/git-core/git-prompt.sh
  export GIT_PS1_SHOWCOLORHINTS=1
  export GIT_PS1_SHOWDIRTYSTATE=1
  PROMPT_COMMAND="${PROMPT_COMMAND:+$PROMPT_COMMAND; }__git_ps1 '\u:\w' '\\\$ '"
fi

Ainda está recebendo este erro:bash: __docker_machine_ps1: command not found
IgorGanapolsky

0

Prefácio: desculpe por não comentar a resposta da haysclark e fazer uma nova, simplesmente não o suficiente.

Se você não instalou o git através do Xcode ou do home-brew, provavelmente encontrará os scripts bash aos quais haysclarks se refere /Library/Developer/CommandLineTools/, e não dentro /Applications/Xcode.app/Contents/Developer/, tornando assim as linhas a incluir no .bashrc o seguinte:

if [ -f /Library/Developer/CommandLineTools/usr/share/git-core/git-completion.bash ]; then
    . /Library/Developer/CommandLineTools/usr/share/git-core/git-completion.bash
fi

source /Library/Developer/CommandLineTools/usr/share/git-core/git-prompt.sh

Você precisará dessas linhas se desejar usar o git-prompt também.

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.