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


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.


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.


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!


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!


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.


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 ...


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/.


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.


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.


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,
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.