OSX 10.10 yosemite beta on git pull : git-sh-setup : No such file or directory


90

OSX 10.10 Yosemite Beta로 업그레이드 한 후 실행 git pull하면 다음 오류가 반환됩니다.

/ Library / Developer / CommandLineTools / usr / libexec / git-core / git-pull : 11 행 : git-sh-setup : 해당 파일 또는 디렉토리 없음

참조 된 git-core 디렉토리를 확인했고 git-sh-setup.sh가 있습니다.

다른 git 명령이 예상대로 정확히 작동합니다.


3
을 제외하고는이 문제가 발생 git stash합니다. 해결책을 찾으면 알려 드리겠습니다
cadlac 2014-06-03

zsh ... git에서만이 문제가 발생했습니다 .bash에서 실행할 때 제대로 작동하는 것 같습니다. Zsh 관련?
zeekay 2014-06-04

12
이것은 zsh를 사용하는 iTerm2의 버그였습니다. iTerm2는 최신 릴리스 (v1.0.0.20140629)에서 수정했습니다.
rds

답변:


100

현재로서는 가장 깨끗한 해결책은 iTerm 세션의 초기 명령을 다음과 같이 변경하는 것입니다.

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

이것은 나를 위해 문제를 해결합니다.

문제 분석을위한 추가 데이터 포인트 : 10.10에서는 PATH 환경 변수의 여러 복사본이 존재하고 서브 쉘이 두 번째 복사본을 선호하는 것 같습니다.

iTerm에서 실행 한대로 콘솔에서 코코아 애플리케이션을 실행하여이를 재현 할 수 있습니다. 다음과 같은 경고가 표시됩니다.

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

나는 이것이 iTerm이 아닌 10.10에서 문제라고 생각하지만 iTerm 이하는 일이 그것이 스스로를 드러내는 원인입니다 (이는 Terminal.app에서 발생하지 않습니다)

업데이트 : 이것은 iTerm이 환경에 "흥미로운"일을함으로써 발생합니다. 이 문제를 해결하려면 iTerm 2.0의 공식 릴리스로 업데이트하십시오.


6
이것은 정답, 놀라운 수정입니다. 그러나, 나는 명령을 설정 /usr/bin/login -f $USER, 단지 내가 :) 여러 계정에 동일한 프로파일 할 수 있습니다
cadlac을

12
분명히 bash는 모든 중복 환경 변수를 제거합니다. 따라서 명령을 설정하면 /bin/bash -c /bin/zsh다른 환경 변수 (예 : $SSH_AUTH_SOCK.
cypheon

2
이것은 지금까지 가장 깨끗한 방법으로 문제를 해결했습니다. 감사합니다!
meghaphone 2014-06-06

2
이것은 자식을 수정합니다. 그러나 id_rsa.pub와 함께 ssh를 사용해야 할 때마다 암호를 입력하라는 요청을 받았습니다. 초기 명령을 변경하거나 Terminal.app에서이 작업을 수행 할 필요가 없었습니다. 어떤 생각?
ZeR0

5
문자 인코딩을 유지하기 때문에 /bin/bash -c /bin/zsh보다 낫다고 생각 /usr/bin/login -f <your user name>합니다. /usr/bin/login -f <your user name>인코딩이 손실되어 파일을 정상적으로 표시 할 수 없습니다.
Alpha Liu

35

나는 이것이 zsh를 사용할 때 iTerm의 버그라고 생각합니다. 그들은 의도적으로 / usr / bin / login을 호출하지 않으며 execle을 사용하여 환경 변수를 지우지 않습니다.


1
와우 당신 말이 맞아요. 다양한 Git 수정 사항을 작동 시키려고 몇 시간을 보냈는데 iTerm2 w / zsh에서 Yosemite의 기본 터미널 (여전히 zsh 포함)으로 전환하는 것이 잘 작동하는 것으로 나타났습니다. 어떻게 찾았 어?
jbnunn 2014-06-05

8
글쎄요, 이건 지금까지 가장 구체적인 사람들입니다 ... 정말 중요한 사건입니다.
Drew

2
그것은 아주 좋은 분석이었습니다. 따라서 좋은 해결 방법은 iTerm의 초기 명령을 / usr / bin / login -f <사용자 이름>으로 설정하는 것입니다.
pilif 2014-06-05

13
또 다른 해결 방법은 iTerm의 로그인 셸 명령을/bin/bash -c /bin/zsh
Vince

1
환경 설정> 프로필> 일반 섹션 에서 login shell로 변경 하고 @Sorenly가 제안한대로 command사용 /bin/bash -c /bin/zah하여이 문제를 바로 해결했습니다!
jlmakes

20

최신 버전의 iTerm2를 다운로드하면이 문제가 해결되었습니다!


1
당신이 기술 자라는 것을 증명하지 않고 해결하고 싶다면 ..., 그냥하세요. Marthyn 덕분에 ...
Krishnaprasad Varma

아래 설명에서 언급했듯이 git pulls가 작동하지 않도록하는 것은 iTerm과 zsh가 함께있는 것으로 보입니다. iTerm2로 이동하면 문제가 해결됩니다.
MikeHoss 2014

4
@MikeHoss를 명확히하기 위해 iTerm2 버전 1.0.x는 작동하지 않지만 iTerm2 버전 2.0.x는 작동합니다. 둘 다 iTerm2이지만 버전이 중요합니다.
Kevin Cooper

16

또 다른 해결책, iTerm2 수정

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

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

chmod +x iTerm

끝난.

Yosemite와 함께 iTerm2를 즐기십시오!


iTerm2가 문제이며 이것은 문제에 대한 최상의 솔루션 중 하나입니다. 명성.
ocodo

공개 10.10 릴리스에서도이 문제가 발생하여 수정되었습니다. 감사합니다 Feng!
Ash Furrow

13

임시 솔루션으로 git-pull 줄 11, 12 및 336을 다음과 같이 수정했습니다.

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

이것은 현재 git-pull을 수정하지만 더 나은 솔루션이 있다고 확신합니다.


2
나는 또한 231처럼 변경해야했습니다. /usr/local/Cellar/git/2.0.0/libexec/git-core/git-parse-remote
Keith Smiley

2
변경해야 할 경우를 대비하여를 가리 키도록 설정했습니다 $GIT_PATH/git-sh-setup.
TheJF 2014 년

1
내가 갖는 /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?이 수정 프로그램을 적용한 후, 사람이 할 수있는 어떤 아이디어가?
Drew

앤드류이 못생긴하지만 난 자식-SH-설정 단계를 모두 교체했다 git으로 /usr/local/bin/git. 몇 가지 경우가 있었다 git교체했다 또한 자식 풀에
jbnunn

3

공식적인 수정이 나오기 전에 Git가 작동해야하는 경우 임시 수정 (Homebrew 및 Git 2.0.0 가정)이 있습니다. 두 개의 쉘 변수를 설정했습니다.

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"

...의 인스턴스 git를 적절한 절대 링크 로 대체했습니다 . 다음 Gists를 사용하여 동일한 작업을 수행 할 수 있습니다.

  • /usr/local/Cellar/git/2.0.0/libexec/git-core/git-sh-setup/git-sh-setup으로 바꿉니다.
  • /usr/local/Cellar/git/2.0.0/libexec/git-core/git-stash/git-stash로 바꿉니다.
  • /usr/local/Cellar/git/2.0.0/libexec/git-core/git-pull/git-pull로 바꿉니다.

이것은 확실히 해킹이지만 당신이 갈 것입니다.

편집 :이 작업을 수행하기 전에 @pilif의 답변을 확인하십시오 ...


1

Ubiquill의 해결 방법은 git rebase (그리고 아마도 다른 기능이 작동하지 않는 것)에도 적용됩니다. 이 경우 47 행과 48 행을 다음 *로 바꾸어야합니다.

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

*이 경로는 homebrew와 함께 git이 설치되어 있고 /usr/local/Cellar/git/2.0.0/ 내부에 있다고 가정합니다.


1

git-pull 파일을 편집하고 그 위에이 줄을 추가합니다 (주석 블록 바로 뒤에).

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

또는 복사하여 터미널에 붙여 넣으십시오.

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

업데이트 : 마지막 iTerm2 업데이트 (1.0.0.20140629) 이후 pilif가 추정 한대로이 재정의 git-pull없이 제대로 실행됩니다 PATH.


이것은 내 구성에서 한 단계 앞으로 나아가는 유일한 해결책 인 것 같습니다. PATH 줄을 추가 한 후 PULL을 시도 할 때이 오류가 발생합니다. git : 'credential-osxkeychain'is not a git command. 'git --help'를 참조하십시오. 어떤 아이디어?
kiks73 2014


0

업데이트 : 여전히 아래 언급 된 릴리스에서 작동하지 않습니다. 내 실수입니다. 힘내 푸시가 작동합니다 힘내 풀이 작동하지 않습니다.

Mac OS X Yosemite 10.10 ( 14A329r )을 사용 하는 Apple에서 문제를 해결 한 것 같습니다 . 저는 일반 Beta Yosemite 채널 (개발자 아님)에 있습니다. 힘내 푸시 /손잡이 수정없이 다시 예상대로 작동합니다.


아니요, 14A329r에서 중복 된 환경 변수가 발생하여 해당 빌드에서 수정되지 않았습니다.
Zr40 2014 년

@ Zr40 thx. 당신이 옳습니다. 어떻게 든 힘내 푸시가 이제 작동합니까? 나를 위해 그러나 힘내 풀은 여전히 ​​작동하지 않습니다.
Frank Lämmer 2014 년
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.