OSX 10.10 yosemite beta no git pull: git-sh-setup: Não existe esse arquivo ou diretório

90

Após a atualização para OSX 10.10 Yosemite Beta, a execução git pullestá retornando o seguinte erro:

/ Library / Developer / CommandLineTools / usr / libexec / git-core / git-pull: linha 11: git-sh-setup: Não existe esse arquivo ou diretório

Verifiquei o diretório git-core referenciado e o git-sh-setup.sh está lá.

Outros comandos git estão funcionando exatamente como o esperado

megafone
fonte
3
Também estou tendo esse problema, exceto com git stash.
Avisarei
Só estava tendo esse problema com zsh ... git parecia funcionar bem quando executado do bash. Relacionado com Zsh?
zeekay
12
Este era um bug no iTerm2 com zsh. iTerm2 corrigiu em sua versão mais recente (v1.0.0.20140629)
rds de

Respostas:

100

Acho que a solução mais limpa para isso por agora é alterar o comando inicial em sua sessão de iTerm para ser

/usr/bin/login -f <your user name>

Isso corrige o problema para mim.

Um outro ponto de dados para análise do problema: parece que em 10.10, existem várias cópias da variável de ambiente PATH e os subshells parecem preferir a segunda cópia.

Você pode reproduzir isso iniciando qualquer aplicativo de cacau no console, conforme iniciado pelo iTerm. Você receberá um aviso parecido com este:

2014-06-04 19:23:09.859 gitx[14676:362580] *** -[NSProcessInfo environment]: Warning: duplicate definition for key 'PATH' found in environment -- subsequent definitions are ignored.  The first definition was '(the path I have configured in my shell)', the ignored definition is '/usr/bin:/bin:/usr/sbin:/sbin'.

Acredito que seja um problema no 10.10 e não no iTerm, mas algo que o iTerm está fazendo está fazendo com que ele se manifeste (isso não acontece no Terminal.app)

Atualização : Isso é causado pelo fato de o iTerm fazer coisas "interessantes" para o ambiente. Atualize para o lançamento oficial do iTerm 2.0 para resolver o problema.

Pilif
fonte
6
Esta deve ser a resposta correta, solução incrível. No entanto, configurei o comando para /usr/bin/login -f $USER, apenas para poder ter o mesmo perfil em várias contas :)
cadlac
12
Aparentemente, o bash remove todas as variáveis ​​de ambiente duplicadas. Portanto, se você definir o comando para /bin/bash -c /bin/zshele preservará outras variáveis ​​de ambiente, por exemplo $SSH_AUTH_SOCK.
cypheon
2
Isso corrigiu o problema para mim da maneira mais limpa até agora. Muito obrigado!
meghaphone
2
Isso corrige o git. Mas sempre que preciso usar ssh com meu id_rsa.pub, fui solicitado a inserir a senha longa. Não precisei fazer isso antes de alterar o comando inicial, nem no Terminal.app. Qualquer ideia?
ZeR0 de
5
Acho que /bin/bash -c /bin/zshé melhor do que /usr/bin/login -f <your user name>, porque mantém a codificação dos caracteres. /usr/bin/login -f <your user name>perdi minha codificação e não consigo exibir meus arquivos normalmente.
Alpha Liu de
35

Eu acredito que este é um bug no iTerm ao usar zsh. Eles deliberadamente não invocam / usr / bin / login e não usam execle para limpar as variáveis ​​de ambiente como deveriam.

Jeremy Huddleston Sequoia
fonte
1
Uau, acho que você está certo. Passei horas tentando fazer várias correções do Git funcionarem e descobri que mudar do iTerm2 w / zsh para o Terminal padrão do Yosemite (ainda com zsh) funciona muito bem. Como você encontrou isso?
jbnunn
8
Bem, este é o grupo de pessoas mais específico de todos os tempos ... Que caso extremo.
Desenhou em
2
essa foi uma análise muito boa. Portanto, uma boa solução é definir o comando inicial no iTerm como / usr / bin / login -f <seu nome de usuário>.
pilif
13
Outra solução alternativa é definir o comando shell de login no iTerm como/bin/bash -c /bin/zsh
Vince
1
Mudar de login shellpara commandna seção Preferências> Perfil> Geral, e usando /bin/bash -c /bin/zahcomo @Sorenly sugeriu, consertou isso!
jlmakes de
20

Baixar a versão mais recente do iTerm2 corrigiu isso para mim!

Marthyn Olthof
fonte
1
Se você quer resolver sem provar que é um técnico ..., faça isso. Graças a Marthyn ...
Krishnaprasad Varma,
Como os comentários abaixo disseram, parece ser o iTerm e o zsh juntos que evita que o git pulls funcione. Ir para o iTerm2 corrige isso.
MikeHoss
4
Para esclarecer @MikeHoss, o iTerm2 versão 1.0.x não funciona, mas o iTerm2 versão 2.0.x sim. Ambos são iTerm2, mas a versão é o que importa.
Kevin Cooper
16

Outra solução, modifique o seu iTerm2

cd /Applications/iTerm.app/Contents/MacOS
mv iTerm iTerm-bin

cat > iTerm <<EOF
#!/bin/sh
unset PATH
\${0}-bin
EOF

chmod +x iTerm

Feito.

Aproveite seu iTerm2 com Yosemite!

Feng
fonte
O iTerm2 é o problema e está entre as melhores soluções para o problema. Kudos.
ocodo
Eu estava enfrentando esse problema até mesmo na versão pública 10.10, e isso resolveu o problema. Obrigado Feng!
Ash Furrow de
13

Como uma solução temporária, modifiquei as linhas 11, 12 e 336 git-pull para serem:

. /usr/local/Cellar/git/2.0.0/libexec/git-core/git-sh-setup

. /usr/local/Cellar/git/2.0.0/libexec/git-core/git-sh-i18n

eval="/usr/local/Cellar/git/2.0.0/libexec/git-core/git-merge $diffstat $no_commit $verify_signatures $edit $squash $no_ff $ff_only"

Isso corrige o git-pull por enquanto, mas tenho certeza de que há uma solução melhor.

Ubiquill
fonte
2
Eu também tive que mudar 231 para. /usr/local/Cellar/git/2.0.0/libexec/git-core/git-parse-remote
Keith Smiley
2
Caso eu precisasse mudar isso, configurei o meu para apontar para $GIT_PATH/git-sh-setupetc.
TheJF
1
Estou começando. /usr/local/Cellar/git/2.0.0/libexec/git-core/git-sh-setup: line 334: git: command not found fatal: 'pull' appears to be a git command, but we were not able to execute it. Maybe git-pull is broken?Depois de aplicar essa correção, alguém tem uma ideia do que fazer?
Drew
@Andrew Isso é feio, mas eu tive que passar pelo git-sh-setup e substituir tudo gitpor /usr/local/bin/git. Houve algumas instâncias de gitgit-pull também que tiveram que ser substituídas
jbnunn
3

Aqui está uma correção temporária (assumindo o Homebrew e o Git 2.0.0) se você precisar que o Git funcione antes de uma correção oficial ser lançada. Eu configurei duas variáveis ​​de shell:

export GIT_PATH="/usr/local/Cellar/git/2.0.0/bin"
export GIT_CORE_PATH="/usr/local/Cellar/git/2.0.0/libexec/git-core"

... e então substituiu as instâncias de gitpor links absolutos apropriados. Você pode usar os seguintes Gists para fazer o mesmo:

  • Substitua /usr/local/Cellar/git/2.0.0/libexec/git-core/git-sh-setup/ por git-sh-setup
  • Substitua /usr/local/Cellar/git/2.0.0/libexec/git-core/git-stash/ por git-stash
  • Substitua /usr/local/Cellar/git/2.0.0/libexec/git-core/git-pull/ por git-pull

Este é um hack com certeza, mas vai te ajudar.

EDIT: Certifique-se de ler a resposta de @pilif antes de fazer isso ...

jbnunn
fonte
1

A solução alternativa da Ubiquill também se aplica ao git rebase (e presumivelmente a quaisquer outras funções que não funcionem). Nesse caso, exige a substituição das linhas 47 e 48 pelo seguinte *:

. /usr/local/Cellar/git/2.0.0/libexec/git-core/git-sh-setup
. /usr/local/Cellar/git/2.0.0/libexec/git-core/git-sh-i18n

* Este caminho assume que você instalou o git com o homebrew e ele reside dentro de /usr/local/Cellar/git/2.0.0/.

Ferchak
fonte
1

Edite seu arquivo git-pull e adicione esta linha em cima dele (logo após o bloco de comentário)

PATH="$(dirname $0):$PATH"

Ou apenas copie e cole no seu terminal:

ed -s $(which git-pull) <<< $'6i\nPATH="$(dirname $0):$PATH"\n.\nwq'

Atualização: Como presumido por pilif , desde a última atualização do iTerm2 (1.0.0.20140629), git-pullexecute corretamente sem esta PATHsubstituição.

Pyrou
fonte
Esta parece ser a única solução para avançar um passo em minha configuração. Depois de adicionar a linha PATH, recebo este erro quando tento PULL: git: 'credential-osxkeychain' não é um comando git. Veja 'git --help'. Alguma ideia?
kiks73
0

ATUALIZAÇÃO: ainda não funciona com o release mencionado abaixo, erro meu. Git push funciona Git pull não funciona.

Parece-me que o problema foi corrigido pela Apple com o Mac OS X Yosemite 10.10 ( 14A329r ). Estou no canal Beta Yosemite geral (não desenvolvedor). Git push /puxar funciona como esperado novamente, sem nenhuma modificação.

Frank Lämmer
fonte
Não, estou tendo variáveis ​​de ambiente duplicadas em 14A329r, então não foi corrigido nessa compilação.
Zr40
@ Zr40 thx. você está certo. de alguma forma Git push funciona agora? para mim, mas o Git pull ainda NÃO está funcionando.
Frank Lämmer,