A instalação caseira do git não terá precedência sobre a versão do sistema (em / usr / bin /)

10

O OS X (ou Xcode) vem com o git 1.7.something, mas depois do brew install git(1.8.0), which gitcontinua retornando o antigo /usr/bin/git.

É isso que recebo quando ecoo $ PATH agora:

/usr/local/bin:/usr/local/sbin:~/bin:/usr/bin:/bin:/usr/sbin:/sbin:/usr/local/bin:/usr/X11/bin:/usr/local/git/bin

O material Homebrew não deveria ter precedência?

Além disso, não tenho ideia de onde isso usr/local/git/binvem no final.

o_o_o--
fonte
Você verificou que o git está realmente em / usr / local / bin?
Joe Bane
Sim. ls /usr/local/binmostra gitestá lá. O Brew também confirma que está instalado. Eu até executei o desinstalador do git ( brew uninstallusando e usando o que acompanha o download oficial do git) e refiz brew install git. Eu continuo recebendo which git = = /usr/bin/git".
o_o_o--
2
Corra which -a gitpara ver se está encontrando.
31512 Joe Bane

Respostas:

7

Entendi. A resposta está na sua pergunta; O brew instala o git para /usr/local/git/bin(não /usr/local/bin), mas, como isso é seguido /usr/binno seu caminho, você obtém esse primeiro. Meu comentário para which -a gitdeveria ter apontado você nessa direção.

Joe Bane
fonte
1
Corra ls -l /usr/local/bin/gittambém. Aposto que é um link simbólico para /usr/bin/git.
21812 Joe Bane
Ah, e /usr/local/git/binparece ser onde o instalador oficial o coloca também.
31512 Joe Bane
Você deve olhar /etc/pathse /etc/paths.dtambém.
Joe Bane
1
aqui está uma virada interessante de eventos: which -a gitretornos /usr/local/bin/git; /usr/bin/git; /usr/local/bin/git. Então, renomeei o velho git usr/bin/git_olde o tirei do caminho. Agora git --versionretorna 1.8, provando que o brew instalou o git com sucesso. - Mais uma vez, renomei /usr/bin/gito nome original ... e de repente está funcionando corretamente! Não sei por que nem como, mas renomear /usr/bin/gite executar o git uma vez parece ter resolvido o problema. Quem sabe qual era a raiz do problema. Obrigado de qualquer maneira :)
o_o_o--
Isso é estranho. Que bom que você está pronto e funcionando agora, pelo menos.
Joe Bane
3

Eu também encontrei esse problema.

Depois de instalar o git através do homebrew, se você executar brew doctor, ele avisará que, como Joe mencionou acima, o sistema está executando o antigo git porque seu local de instalação é o primeiro.

Mas, no mesmo aviso, o homebrew fornece o código para corrigi-lo:

$ echo export PATH='/usr/local/bin:$PATH' >> ~/.bash_profile
chorbs
fonte
0

Faz parte dos meus hábitos no Unix ter um ~/bindiretório que eu coloquei no início do meu PATH. Este é um dos primeiros bits no meu .bashrc:

case ":$PATH:" in
  *:$HOME/bin:*) ;;     # do nothing if $PATH already contains $HOME/bin
  *) PATH=$HOME/bin:$PATH ;;  # in every other case, add it to the front
esac

Com isso em prática, fazer seletivamente apenas o gerenciado pelo Homebrew gitter precedência sobre a versão do sistema (em vez de todos os binários gerenciados pelo Homebrew) e apenas as sessões do shell (em vez de todos os programas iniciados de qualquer lugar, incluindo programas da GUI), é tão simples quanto simbolizando:

ln -s /usr/local/bin/git ~/bin/git
Aristóteles Pagaltzis
fonte