在git pull上的OSX 10.10优胜美地测试版:git-sh-setup:没有这样的文件或目录

meg*_*one 90 git zsh osx-yosemite

升级到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命令正如预期的那样工作

pil*_*lif 100

我认为现在最干净的解决方案是将iTerm会话中的初始命令更改为

/usr/bin/login -f <your user name>
Run Code Online (Sandbox Code Playgroud)

这解决了我的问题.

用于分析问题的另一个数据点:似乎在10.10中,存在PATH环境变量的多个副本,并且子shell似乎更喜欢第二个副本.

您可以通过启动iTerm启动的控制台上的任何cocoa应用程序来重现这一点.你会得到一个如下警告:

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'.
Run Code Online (Sandbox Code Playgroud)

我相信这是10.10中的一个问题,而不是iTerm,但是iTerm正在做的事情正在使它自我显现(这在Terminal.app中不会发生)

更新:这是由iTerm对环境做"有趣"的事情造成的.更新到iTerm 2.0的正式版本,以解决这个问题.

  • 显然,bash删除了所有重复的环境变量.因此,如果将命令设置为`/ bin/bash -c/bin/zsh`,它将保留其他环境变量,例如`$ SSH_AUTH_SOCK`. (12认同)
  • 这应该是正确的答案,惊人的解决方案.但是,我将命令设置为`/ usr/bin/login -f $ USER`,这样我就可以在多个帐户上拥有相同的配置文件:) (6认同)
  • 我认为``/ bin/bash -c/bin/zsh```比``/ usr/bin/login -f <你的用户名>```更好,因为它保留了字符编码.```/ usr/bin/login -f <你的用户名>```丢失了我的编码,我无法正常显示我的文件. (5认同)
  • 这为我解决了迄今为止最干净的问题.非常感谢! (2认同)
  • 这修复了git.但每当我需要在我的id_rsa.pub中使用ssh时,我被要求输入密码.我没有必要在更改初始命令之前执行此操作,也不必在Terminal.app中执行此操作.任何的想法? (2认同)

Jer*_*oia 35

我相信这是使用zsh时iTerm中的一个错误.他们故意不调用/ usr/bin/login,并且他们不使用execle来清除它们应该的环境变量.

  • 另一种解决方法是将iTerm中的login shell命令设置为`/ bin/bash -c/bin/zsh` (13认同)
  • 嗯,这是有史以来最特殊的一群人......这是一个多么优秀的案例. (8认同)
  • 这是一个非常好的分析.因此,一个好的解决方法是将iTerm中的初始命令设置为/ usr/bin/login -f <您的用户名>. (2认同)

Mar*_*hof 20

下载最新版本的iTerm2为我解决了这个问题!

  • 为了澄清@MikeHoss,iTerm2版本1.0.x不起作用,但iTerm2版本2.0.x可以.两者都是iTerm2,但版本才是最重要的. (4认同)

Fen*_*eng 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
Run Code Online (Sandbox Code Playgroud)

完成.

享受优胜美地的iTerm2吧!


小智 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"
Run Code Online (Sandbox Code Playgroud)

这个现在修复了git-pull,但我确信有更好的解决方案.

  • 我也不得不改变231到`.在/ usr /本地/库/混帐/ 2.0.0 /的libexec/git的核心/混帐解析,remote` (2认同)
  • 如果我需要改变这个,我设置我的指向`$ GIT_PATH/git-sh-setup`等. (2认同)