O git é preenchido automaticamente para * branches * na linha de comando?


350

Na minha máquina Linux, tenho preenchimento automático para ramificações com o Git.

[Observe que estamos falando sobre a conclusão do ramo git, não sobre o bash (por exemplo, comandos, arquivos, etc.). Portanto, NÃO a resposta de Lane ]

Por exemplo, eu posso digitar git checkout+ TABe obter uma lista de ramificações.

Ou posso digitar git checkout feb*+ TABpara obter todos os ramos que começam com "feb".

Como posso obter essa funcionalidade em um Mac?

Eu tentei baixar e executar bash-completion/bash_completione bash-completion/bash_completion.sh.in, mas nenhuma alegria. O primeiro deu mensagens de erro sobre declare: -A invalid_option. O segundo não deu erros. Quando eu git checkout+ TABainda estou recebendo uma lista de arquivos no diretório, não ramos. Eu estou na raiz do projeto.

O preenchimento automático de diretórios e comandos bash está funcionando bem, por isso é específico do Git.

Respostas:


483

ok, então eu precisava do script de preenchimento automático do git .

Eu peguei isso neste URL:

curl https://raw.githubusercontent.com/git/git/master/contrib/completion/git-completion.bash -o ~/.git-completion.bash

Não é preciso se preocupar com o diretório em que você está quando o executa, pois o diretório inicial ( ~) é usado com o destino.

Em seguida, adicionei ao meu ~/.bash_profilearquivo o seguinte código 'execute se ele existir':

if [ -f ~/.git-completion.bash ]; then
  . ~/.git-completion.bash
fi

Atualização: estou tornando esses bits de código mais concisos para reduzir meu .bashrcarquivo; neste caso, agora uso:

test -f ~/.git-completion.bash && . $_

Nota: $_significa o último argumento para o comando anterior. então . $_significa executá-lo - sendo " .git-completion.bashneste caso"

Isso ainda funciona no Ubuntu e OSX e em máquinas sem o script .git-completion.bashscript.

Agora git Tab(na verdade é git TabTab) funciona como um encanto!

ps: Se isso não der certo, talvez você precise executar chmod u+x ~/.git-completion.bashpara se conceder a permissão necessária:

  • chmod é o comando que modifica as permissões de arquivo
  • u significa o usuário que possui o arquivo, por padrão, seu criador, ou seja, você
  • + significa definir / ativar / adicionar uma permissão
  • x significa permissão de execução, ou seja, a capacidade de executar o script

1
Sim, reiniciar o terminal após adicionar o script bash fez com que funcionasse. Eu estava sentado aqui me perguntando por que ele continuava tentando completar automaticamente a minha Modelspasta quando eu batia m Tabpara torná-lo preenchido automaticamente master.
10285 Alex

1
Veja também unix.stackexchange.com/q/48862/10043 para obter uma dica diferente
Michael Durrant

3
Se a resposta aceita não está funcionando para qualquer um, em seguida, tente o seguinte: source ~/.bash_profiledepois de colar o código. Reiniciar o terminal também fará a mesma coisa.
Ben

Obrigado! Tentei outras coisas, mas nada funcionou (incluindo este github.com/bobthecow/git-flow-completion/wiki/… ). Sua solução funcionou como um encanto;)
rgoliveira

1
(você não tem bebida git, mas padrão da Apple git) brew install gite reiniciar o terminal para aqueles que estão enfrentando erro estranho comogit checunknown option: --list-cmds=list-mainporcelain,others,nohelpers,alias,list-complete,config usage: git [--version] [--help] [-C <path>] [-c <name>=<value>] [--exec-path[=<path>]] [--html-path] [--man-path] [--info-path] [-p | --paginate | --no-pager] [--no-replace-objects] [--bare] [--git-dir=<path>] [--work-tree=<path>] [--namespace=<name>] <command> [<args>]
Sachin

89

Algumas pessoas preferem usar um gerenciador de pacotes para automatizar a instalação, atualização e configuração de pacotes do Mac OS. Sou fã de gerenciadores de pacotes e acho que o Homebrew é o melhor gerenciador de pacotes para o Mac OS (alguns diriam que é o gerenciador de pacotes de fato do Mac OS).

Depois de instalar o Homebrew, você pode simplesmente instalar o git juntamente com o bash-complete com brew install git bash-completion.

Você precisará colocar o seguinte no seu ~/.bash_profile:

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

(Nota: Se esta instalação falhar com um erro 404 e você já tiver o git instalado, remova a parte git desta instalação de preparação)

Mais informações sobre a instalação do git e da conclusão do bash com o brew aqui.


27
Adicionar gite adicionar bash-completionnão é o mesmo que adicionar. .git-completion.bash Eles são programas diferentes e fazem coisas bem diferentes - um faz bash no autocompletar comando e o outro git comanda o autocompletar e 'nair the twain will meet;)
Michael Durrant

trabalhando como um encanto, muito obrigado. Você poderia, por favor, explicar qual é o uso do script no qual você me adicionou ~/.bash_profile?
18717 Vikas Bansal

Apesar do que outros disseram sobre essa resposta, foi o que fez o git autocomplete funcionar no terminal.
Iain

32

Execute isso no terminal:

curl https://raw.githubusercontent.com/git/git/master/contrib/completion/git-completion.bash -o ~/.git-completion.bash

Então, faça o seguinte:

vi ~/.bash_profile

Adicione estas linhas:

if [ -f ~/.git-completion.bash ]; then
  . ~/.git-completion.bash
fi

Isso é tudo. Isso funcionou para mim.


1
(2ª etapa) Se alguém prefere abrir o bash_profile com um editor de texto, basta fazer o seguinte: Bash_profile -e aberto
Nicolas Bodin-Ripert

2
Em um Mac OS High Sierra virgem, o ~/.bash_profilearquivo não existe. Tudo bem, basta criar o arquivo e colocar o ifscript lá e salvar. Recarregue seu shell depois e ele funcionará.
agm1984

11

gite git-completion.bashjá vem com as ferramentas de linha de comando do macOS ( xcode-select --install). Para ativar o preenchimento automático do bash, adicione isso ao seu ~/.bash_profile.

[ -f /Library/Developer/CommandLineTools/usr/share/git-core/git-completion.bash ] && . /Library/Developer/CommandLineTools/usr/share/git-core/git-completion.bash

Isso também permitirá o preenchimento automático para ramificações git.


Tenho certeza de que tenho ferramentas de linha de comando instaladas, mas esse arquivo não existe no meu caso. Feliz por acompanhar a fermentação (e como o meu git também está com a fermentação, talvez mais sábio também).
drevicko 25/07

Obrigado! Na IMO, essa deve ser a resposta com a marca de seleção verde.
geekisthenewcool

8

Aqui está o que está confundindo alguns de vocês: você tem o brew ou as portas instaladas, mas está usando um sistema no git /usr/bin/. Para verificar isso:

which git

Se você vir /usr/bin/git, o brew não está configurado corretamente ou você não instalou o git via brew.

Se você instalar o git por meio do brew, ativar a conclusão do bash para o brew também habilitará as conclusões do bash para o git. Isso ocorre porque, /usr/local/etc/bash_completionna verdade, tudo origina tudo /usr/local/bash_completion.d, e o pacote brew para o git instala um script de conclusão do git lá.


Isso faz sentido, mas como você "habilitaria as conclusões do bash para a mistura"? Você está perdendo como fazer isso, este deve ser parte de sua resposta
skplunkerin

Eu só fiz isso (ele funciona, obrigado) via simplified.guide/macos/bash-completion , mas a conclusão automática é um par de segundos atrasado ... estranho
skplunkerin

4

Você pode instalar o bash e o git do MacPorts com a opção "bash_completion" ativada. É provavelmente a maneira mais fácil de manter atualizados o git e as conclusões.

http://denis.tumblr.com/post/71390665/adding-bash-completion-for-git-on-mac-os-x-snow-leopard

Para instalar o MacPorts: http://www.macports.org/install.php/

informação adicional

Quanto à localização das configurações de conclusão no seu sistema Linux, consulte /etc/bash_completion.d/git (é um arquivo longo). Porém, copiar isso por si só provavelmente não funcionará, pois foi projetado para ser originado pela estrutura de conclusão por meio de / etc / bash_completion (que é proveniente de /etc/profile.d/bash_completion.sh; arquivos em / etc / profile .d são originários de / etc / profile).


2

Se a conclusão do seu git estiver parcialmente interrompida, mesmo após a fonte https://raw.githubusercontent.com/git/git/master/contrib/completion/git-completion.bash, talvez seja necessário atualizar sua versão do git.

Por exemplo, quando eu digitava git check+ TAB, o preenchimento automático era correto git checkout. Mas quando eu digitei git checkout+ TAB, ele não exibia apenas a lista de ramificações HEAD.

A correção para mim foi atualizar minha gitversão. Eu estava no 2.7.0, o que aparentemente não era compatível com o mais recente git-completion.bash. Eu executei brew upgrade git, que o atualizou para a versão 2.13.0, e agora preenche corretamente meus nomes de ramificações.


Eu estava recebendo o mesmo problema, mas eu tive que correr brew upgrade gite brew link git (com substituição ativada)
Tope

1
Obrigado pela captura @Tope. Eu mudei updatepara upgrade.
wisbucky

2

De longe, a melhor referência que encontrei para resolver esse problema está no SpinDance , de Connor Livingston :

Se o script git-conclusão.bash não existir na sua máquina, recupere-o no link que forneci acima (que é esse ) e salve-o na sua máquina local em um novo arquivo chamado git-conclusão.bash no / diretório usr / local / etc / bash_completion.d / . Se o script git-completado.bash existe em sua máquina, mas não está no diretório /usr/local/etc/bash_completion.d/ , devemos criar uma cópia dele nesse diretório. Um sudo rápido cp /current/path/to/your/git-completion.bash /usr/local/etc/bash_completion.d/git-completion.bash deve fazer o truque. Para quem está curioso sobre o /usr/local/etc/bash_completion.d/ diretório: serve para armazenar novos comandos de conclusão, e talvez seja necessário criá-lo se ele ainda não existir em sua máquina.

Nesse ponto, o script git-conclusão.bash deve existir em sua máquina local no diretório /usr/local/etc/bash_completion.d/ . Agora, vamos conectar o script de conclusão do git ao bash apontando para ele em ~ / .bash_profile .

Nota: o til da frase anterior refere-se ao diretório inicial do seu computador. Adicione a seguinte linha ao ~ / .bash_profile : source /usr/local/etc/bash_completion.d/git-completion.bash e salve. A etapa final é recarregar seu perfil do bash. Você pode conseguir isso executando o source ~ / .bash_profile na sua sessão atual do bash.


1

Tentei e funciona bem para ramos, mas quando você faz git st+ tab, ele mostra o erro como este

opção desconhecida: --list-cmds = list-mainporcelain, outros, nohelpers, alias, lista-completa, uso da configuração: git [--version] [--help] [-C] [-c =] [--exec -path [=]] [--html-path] [--man-path] [--info-path] [-p | --paginar | --no-pager] [--no-replace-objects] [--bare] [--git-dir =] [--work-tree =] [--namespace =] []

Procurei na internet e descobriu que --list-cmdsna .git-completion.bashera em versão mais recente do git e no meu mac a versão git foi2.17.2

Aqui estão as soluções

Solução 1

  1. Verifique a versão do git usando o git --versioncomando
  2. Em seguida, coloque o mesmo número de versão no URL que eu fiz

    curl https://raw.githubusercontent.com/git/git/v2.17.2/contrib/completion/git-completion.bash -o ~/.git-completion.bash
  3. Siga as mesmas etapas da resposta superior, insira o código abaixo em ~/.bash_profile

    if [ -f ~/.git-completion.bash ]; then
      . ~/.git-completion.bash
    fi
    

Solução 2

Você deve tentar atualizar a versão git para a mais recente, e deve funcionar.


0

Instale oh-my-zsh e defina zsh como seu shell padrão e agradeça-me mais tarde :)


Eu tenho feito isso, precisamente, na esperança de não ter de lidar com isso - ainda há sugestões de filial após a guia de bater
Jytug

Na verdade, você não precisa do oh-my-zsh ou de qualquer sistema de plugins separado! A conclusão do Git sai da caixa, você só precisa habilitá-lo.
SilverWolf 30/04

0

A maioria dos usuários terá gitinstalado como parte das ferramentas de linha de comando xcode em /usr/bin/gite as regras de conclusão do bash para o git estarão disponíveis em /Library/Developer/CommandLineTools/usr/share/git-core/git-completion.bash.

Nesse caso, não há necessidade de instalar o git do Homebrew ou as regras de conclusão do git de origem em raw.githubusercontent.com. Basta criar um link simbólico da seguinte maneira:

cd /usr/local/etc/bash_completion.d/
ln -s /Library/Developer/CommandLineTools/usr/share/git-core/git-completion.bash git

Nota: verifique se você instalou e configurou o bash-completionpacote do Homebrew.


-2

Localize o seu .bashrcarquivo.

Abra-o e adicione esta linha na parte inferior:

source /etc/bash_completion.d/git


1
Não tenho nada em uma /etc/bash_completion.d/pasta, em um sistema relativamente novo (OSX 10.10.3).
livingtech

Tente criá-lo.
crmpicco

Não bash_completion, git_completion, que faz coisas diferentes.
Michael Durrant

@MichaelDurrant Funciona. Confie em mim. ;) prowrestlingtees.com/media/catalog/product/cache/1/image/…
crmpicco

@crmpicco Você poderia fornecer instruções para a criação /etc/bash_completion.d/git? Isso tornaria sua resposta mais valiosa.
Dannid
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.