O `git` do Homebrew não está usando a conclusão

144

Ao usar o git do OSX, depois de modificar um arquivo, posso simplesmente fazer git commit <tab>, e isso completará automaticamente o nome do arquivo para aquele que foi modificado. No entanto, se eu instalar uma versão mais recente do git a partir do homebrew e usá-lo, esse recurso não funcionará mais (o que significa que eu pressiono <tab>e ele apenas me "pergunta" em qual arquivo eu quero fazê-lo, mesmo incluindo os que não apresentam alterações. )

Alguém pode esclarecer o porquê e como resolver isso? Eu preferiria usar o git do homebrew, já que é mais atualizado.

Meu shell é zsh e nem instalou bash-completionnem zsh-completionsfuncionou (mesmo depois de seguir as instruções de pós-instalação do homebrew).

Além disso, depois de instalar o git com homebrew, ele diz

Bash completion has been installed to: /usr/local/etc/bash_completion.d
zsh completion has been installed to: /usr/local/share/zsh/site-functions

Então eu não deveria poder usar um desses?

user137369
fonte
Qual versão zshe gitvocê está usando?
simont
Últimas de homebrew. zsh 5.0.2 e git 1.8.1.3
user137369
Outras gitconclusões funcionam ( git co<TAB>==> git commit, por exemplo)?
simont 28/02
2
Eu suspeito que alguns problemas diferentes acabem aqui, mas a instalação do git via brew corrigiu isso para mim. Parece que zsh-completionsnão estava satisfeito com o mac git, embora funcionasse bem antes (possivelmente atualizado às cegas para 0.17.x).
ti7

Respostas:

287

Você está procurando:

brew install git bash-completion

Como afirma o comentário do warpc, você precisará adicionar o seguinte ao seu ~/.bash_profilepara obter o trabalho de conclusão do basebrew do homebrew:

if [ -f $(brew --prefix)/etc/bash_completion ]; then
    . $(brew --prefix)/etc/bash_completion
fi

O acima mencionado é mencionado nas advertências quando você instala a fórmula de conclusão do bash.


Nota: se você estiver usando o Bash v4 ou posterior (via brew install bash), vai querer usar brew install bash-completion@2, para habilitar o preenchimento de guias, adicione o seguinte, ~/.bash_profileconforme descrito nas advertências:

export BASH_COMPLETION_COMPAT_DIR="/usr/local/etc/bash_completion.d"
[[ -r "/usr/local/etc/profile.d/bash_completion.sh" ]] && . "/usr/local/etc/profile.d/bash_completion.sh"

A exportação adicional é necessária para git, docker, youtube-dl e outras conclusões que podem estar incluídas no $(brew --prefix)/etc/bash_completion.d/diretório

Graham Perks
fonte
3
Meu shell é zsh. Isso significa que eu deveria fazer brew install git zsh-completions? Além disso, depois de instalar o git com homebrew, diz Bash completion has been installed to: /usr/local/etc/bash_completion.d zsh completion has been installed to: /usr/local/share/zsh/site-functions: então eu não poderia usar um desses?
User137369
2
Nem instalou bash-completionnem zsh-completionsfuncionou (mesmo depois de seguir as instruções do homebrew após a instalação).
user137369
12
Você também adicionou em ~ / .bash_profile para bash case este conteúdo: if [-f $ (brew --prefix) / etc / bash_completion]; então . $ (brew --prefix) / etc / bash_completion fi
warpc
5
Eu já instalei o git sem fermentação. Agora eu quero instalar o bash_completion usando o brew. Corri bebida instalar bash-completion e acrescentou código acima, mas sem sorte
MagePsycho
3
Vale a pena notar que a instalação do git através do brew é essencial para que isso funcione. Eu não sabia que a versão do git para maçãs era parte do problema. I downvoted esta resposta antes de eu sabia disso e agora eu não posso upvote :(
Reimus Klinsman
109

A conclusão da guia git deste get está funcionando no OSX sem a necessidade de reiniciar o seu terminal:

curl https://raw.githubusercontent.com/git/git/master/contrib/completion/git-completion.bash -o ~/.git-completion.bash && echo "source ~/.git-completion.bash" >> ~/.bash_profile && source ~/.bash_profile
user2347638
fonte
14
É meio trapaceiro chamar isso de one-liner ao usar &&. Qualquer script bash pode ser uma linha única assim.
precisa saber é o seguinte
1
Você é o verdadeiro MVP!
heez
2
Definitivamente melhor que o brew installmétodo. Simplesmente porque funciona.
Dchayka
2
Estive pesquisando por horas uma solução sobre o motivo pelo qual o bash não estava captando os comandos de conclusão do git. Finalmente, isso funcionou! Muito obrigado!
TheAmazingKnight
1
Esta é a solução real mais fácil
Rigin Oommen
22

Caso alguém cometa meu erro estúpido, tente brew install git. Eu estava usando o gitque acompanha o Xcode e não percebi que nunca havia instalado o git do Homebrew para obter os preenchimentos automáticos.

Harvey
fonte
19

por alguma razão, estava faltando o arquivo na $(brew --prefix)/etc/bash_completionresposta correta de @Graham Perks 'não funcionou para mim

Acabou que a correção no meu caso foi:

brew unlink bash-completion
brew link bash-completion
Anentrópico
fonte
Depois de seguir a resposta do @Graham Pixel, isso finalmente fez com que eu trabalhasse.
Lucas
Isso também funcionou para mim com o Homebrew 1.6.0, git 2.17.0 (hub 2.2.9) e bash-conclusão 1.3 no OS X Sierra 10.12.6.
jared
10

Resolvi o problema descobrindo que $(brew --prefix)/etc/bash_completionretornava Permission deniedquando executado. Então, depois de um simples:

chmod +x $(brew --prefix)/etc/bash_completion

Agora tudo está funcionando bem. Estou me perguntando por que o Homebrew não torna o bash_completionarquivo executável na instalação.

Asbjørn Ulsberg
fonte
5
Não, isso está errado. bash_completiondeve ser sourceusado para que as definições estejam no seu shell; executar não terá efeito.
toddkaufmann
5

Encontrei uma solução funcional. É muito recente (de autoria de 16 horas atrás e confirmado há 2 horas) e vem diretamente do homebrew .

brew install git --without-completions

Apenas tentei, e finalmente funciona como pretendido.

user137369
fonte
3
Não vejo como a instalação gitsem conclusão poderia melhorar a situação da conclusão não funcionando. Acredito que a resposta de Graham Perks, stackoverflow.com/a/14970926/1199564, deva ser sinalizada como a resposta correta.
mgd 01/09/13
Eu tive um problema semelhante e resolvi reinstalar git --without-completionse buscar o bash-completion.basharquivo, o .bash_profileque provavelmente é substituído após o procedimento padrão.
Leonardo
1
Esta não é uma resposta correta. A resposta de @graham perks está correta.
CantGetANick
A resposta de @CantGetANick Graham não resolveu meu problema, foi o que fiz, foi por isso que o marquei.
user137369
1
Concordo 100% com user137369: Eu já tinha o pacote bash-complete do homebrew instalado, então a resposta do @ graham não poderia funcionar para mim. No entanto, brew install gitcorrigimos tudo (não é necessário - sem conclusões). Eu acho que essa também é uma resposta correta.
Bronson
5

Eu tive o mesmo problema e até encontrei este post esta manhã. Corrigi o problema atualizando o brew com brew updatee reinstalando o git with brew reinstall git.

Fui então notificado de outro arquivo que está bloqueando o processo de vinculação do homebrew, no meu caso /usr/local/share/zsh/site-functions/git-completion.bash. A remoção do arquivo e a execução brew link gitresolveram o problema. Acho que era apenas uma versão ruim da receita que encontramos.

Jonathan Knapp
fonte
1
Você também notará que a versão do git que você está usando é da Apple e não a versão instalada pelo Homebrew. Pelo menos no meu caso eu fiz. Você pode conferir a versão comgit --version
Jonathan Knapp
Não. Isso ainda não funciona para mim. Eu sempre voltei a usar o git do OSX, essa conclusão é um recurso muito grande para ser deixado de lado.
user137369
A conclusão do git parou de funcionar para mim após a atualização para o Mavericks. Eu precisava brew reinstall gite também brew reinstall bash-completionpara fazê-lo funcionar novamente.
Krešimir Nesek
3

Se você tem $BASH_VERSION<4.1, por exemplo 3.2.57(1)-release, vá em frente com:

brew install bash-completion
# In ~/.bash_profile :
if [ -f $(brew --prefix)/etc/bash_completion ]; then
    . $(brew --prefix)/etc/bash_completion
fi

No entanto, se você brew install bashprecisar obter a versão, 4.4.12(1)-release poderá usar as conclusões melhores e mais completas em:

brew install bash-completion@2
# In ~/.bash_profile:
[ -f "$(brew --prefix)/share/bash-completion/bash_completion" ] \
&& . "$(brew --prefix)/share/bash-completion/bash_completion"

Observe que alguns pacotes (brew, docker, tmux) ainda farão algumas conclusões, $(brew --prefix)/etc/bash_completion.d/então você pode adicionar:

for completion in "$(brew --prefix)/etc/bash_completion.d/"*
do
    . $completion
done

Finalmente, você poderá adicionar o script de conclusão do git se, por algum motivo, a maneira como você instalou o git não o incluiu em nenhum deles:

[[ -f $(brew --prefix)/etc/bash_completion.d/git \
|| -f $(brew --prefix)/share/bash-completion/completions/git ]] \
|| curl https://raw.githubusercontent.com/git/git/master/contrib/completion/git-completion.bash \
    -o $(brew --prefix)/etc/bash_completion.d/git

Você pode obter e adicioná-lo com o acima.

dlamblin
fonte
1

Para mim, eu tive que colocar

source $(brew --prefix)/etc/bash_completion

para .bashrc(não .bash_profile) para que isso funcione.

".bash_profile é executado para shells de logon, enquanto .bashrc é executado para shells interativos sem logon" - de Qual é a diferença entre .bash_profile e .bashrc? Parece-me que o MacOS Sierra não executa apenas .bash_profileao abrir uma nova janela do terminal .bashrc.

Eu não o colocaria em _bash_profile, porque teria que reiniciar / sair para que as atualizações entrassem em vigor.

antonyh
fonte
1

Isso funcionou para mim no Mojave (OSX 10.14.1):

brew install bash-completion

Em seguida, adicione a seguinte linha ao seu ~ / .bash_profile:

[ -f /usr/local/etc/bash_completion ] && . /usr/local/etc/bash_completion
ar31an
fonte
Apenas multiplica o número de avisos
Hussain Akram
1

Em 2019, usando o Bash v5, você não precisa fornecer explicitamente o script de conclusão do git bash no seu .bash_profileou.bashrc

  1. Verifique se você tem as duas linhas a seguir em seu .bashrc
export BASH_COMPLETION_COMPAT_DIR="/usr/local/etc/bash_completion.d"
[[ -r "/usr/local/etc/profile.d/bash_completion.sh" ]] && . "/usr/local/etc/profile.d/bash_completion.sh"
  1. Faça o download do script de conclusão do git bash ( https://raw.githubusercontent.com/git/git/master/contrib/completion/git-completion.bash) e salve-o /usr/local/etc/bash_completion.d/comogit

É isso aí! O Bash selecionará automaticamente o arquivo de conclusão do git e permitirá a conclusão.


Nota lateral: eu recomendo colocar todas essas alterações, .bashrcpois isso garante que, quando você soltar em um shell interativo (por exemplo, de pipenv shell), as conclusões serão carregadas corretamente, pois o bash será fonte .bashrce NÃO .bash_profile.

cgons
fonte
0

Pode ter algo a ver com o libedit sendo usado em vez de readline no Lion.

Tente instalar o readline antes do git.

brew install readline
Alex
fonte
0

Para aqueles que já possuem o brew bash-installation instalado. Eu não tinha o script de conclusão do git instalado e não consegui encontrar nenhum toque para isso.

Então eu adicionei manualmente:

curl https://raw.githubusercontent.com/git/git/master/contrib/completion/git-completion.bash -o $(brew --prefix)/etc/bash_completion.d/git

Observe que você precisa renomear o arquivo e remover a extensão para que ele funcione.

Se você não possui a conclusão ou o git instalado, instale-o na resposta aceita.

brew install git bash-completion

Andrei
fonte
0

Se você usou o homebrew para instalar o git, provavelmente não há necessidade de instalar nada para dar suporte à conclusão do git. O arquivo "git-conclusão.bash" está em algum lugar (o meu estava aqui: /usr/local/git/contrib/completion/git-completion.bash)

Tudo o que você precisa fazer é encontrar o arquivo: sudo find / -type f -name "git-conclusão.bash"

Em seguida, forneça seu caminho no seu .bash_profile. Por exemplo, eu precisava adicionar esta linha ao meu ~ / .bash_profile:

source /usr/local/git/contrib/completion/git-completion.bash

Não se esqueça de buscar seu ~ / .bash_profile ou reabrir seu terminal;)

from: como ativar o git-tab-conclusão-bash-mac-os-x

Dozon Higgs
fonte
@ user137369 ele faz - causa aqui você não precisa instalar outras coisas que já foi instalado ...
Dozon Higgs
0

Sei que este é um post antigo, mas você realmente não precisa instalar nenhum pacote adicional.

O Homebrew está informando que existe um diretório com todo o material necessário.

Você pode simplesmente adicionar a seguinte linha ao seu .bash_profilese estiver usando o Bash:

source /usr/local/etc/bash_completion.d/git-completion.bash
aldavigdis
fonte
-1

Habilitar a conclusão automática de comandos GIT no MAC-OS Mojave 10.14 Sou desenvolvedor e uso o GIT na linha de comando o tempo todo. Quando considero a perspectiva de desenvolvimento, eu costumava executar muitos comandos usando a linha de comando para operações GIT. Na maioria das vezes, é muito irritante que o MAC OS não tenha suporte automático para a conclusão do comando, o qual eu apoio parcialmente. bem como as sugestões de comando, o que significa quais são os comandos disponíveis para caracteres digitados. Portanto, é muito problemático digitar um comando muito longo e, principalmente, tarefas repetitivas, como erro de digitação. :(

A conclusão da guia certamente seria mais rápida e fácil. Infelizmente, a instalação padrão do git em alguns computadores Mac não tem o preenchimento de guias ativado.

Para procurar uma solução para o problema, existem várias soluções encontradas na pesquisa na Web, como StackOverflow, GitHub e também na mídia. Infelizmente, essas soluções não funcionaram para mim e foram frustradas por tentar soluções diferentes tantas vezes.

Eu estava pesquisando profundamente e tentando soluções diferentes e, felizmente, é uma solução fácil. Abaixo estão as etapas que eu coletei de várias postagens e finalmente funcionou como esperado. Então, espero compartilhar com outras pessoas que têm esse problema como eu.

Se você for à pesquisa na web e poderá encontrar muitas soluções que mencionaram o arquivo bash do git conclusão. Até o guia GitHub também. Mas sugiro que você verifique primeiro se o arquivo git-conclusão.bash já está no seu computador MAC com o git-core ou qualquer outra coisa que veio da instalação. você pode usar o comando abaixo.

sudo find / -type f -name "git-completion.bash"

você vai obter resultados abaixo. (pode haver alguma diferença de acordo com o conteúdo)

/Library/Developer/CommandLineTools/usr/share/git-core/git-completion.bash
/Users/Dilanka/git-completion.bash
/Users/Dilanka/.oh-my-zsh/plugins/gitfast/git-completion.bash
/Users/Dilanka/Downloads/git-completion.bash

Eu sugiro que você escolha qual instalado do git-core

Se o script git-completado.bash não existir na sua máquina, recupere-o a partir do abaixo fornecido acima e salve-o na sua máquina local em um novo arquivo chamado git-completado.bash no / usr / local / etc / diretório bash_completion.d /.

https://git-scm.com/book/en/v1/Git-Basics-Tips-and-Tricks

Se você usa o shell Bash, o Git vem com um bom script de conclusão automática que você pode ativar. Faça o download diretamente do código fonte do Git em

https://github.com/git/git/blob/master/contrib/completion/git-completion.bash

Se o script git-conclusão.bash existe na sua máquina, mas não está no diretório /usr/local/etc/bash_completion.d/, você deve criar esse diretório e copiar o arquivo nele. O comando abaixo fará o trabalho:

sudo mkdir /opt/local/etc/bash_completion.d
sudo cp /Library/Developer/CommandLineTools/usr/share/git-core/git-completion.bash /usr/local/etc/bash_completion.d/git-completion.bash

Após a conclusão do acima. O script git-conclusão.bash deve existir na sua máquina local no diretório / usr / local / etc / bash_completion.d /.

Agora você precisa atualizar seu perfil usando o comando abaixo. Ele carregará seu arquivo bash adicionado ao contexto do terminal.

source ~/.bash_profile

Ótimo!!! você fez isso. Basta iniciar a janela do terminal e experimentá-lo. Basta digitar "git sta", ele mostrará sugestões como abaixo:

git sta
stage    stash    status
git chec<TAB> will show git checkout

veja meu post no GitHub aqui:

https://github.com/DIL8654/Enable-Auto-Completion-of-GIT-commads-on-MAC-OS-Mojave

Veja meu post Médio aqui:

https://medium.com/@dilanka85/enable-auto-completion-of-git-commands-on-mac-os-mojave-10-14

Dilanka M
fonte