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

升级到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命令完全按照预期工作

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

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

这为我解决了这个问题。

进一步分析这个问题的数据点:似乎在10.10中,PATH环境variables存在多个副本,子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'. 

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

更新 :这是由iTerm对环境做“有趣”的东西造成的。 更新到iTerm 2.0的正式版本,使这个问题消失。

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

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

另一个解决scheme,修改你的iTerm2

 cd /Applications/iTerm.app/Contents/MacOS mv iTerm iTerm-bin cat > iTerm <<EOF #!/bin/sh unset PATH \${0}-bin EOF chmod +x iTerm 

完成。

享受你的iTerm2与优胜美地!

作为一个临时解决scheme,我修改了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,但我确定有一个更好的解决scheme。

这是一个临时修复(假设Homebrew和Git 2.0.0),如果你需要Git在正式修复之前工作。 我设置了两个shellvariables:

 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" 

…然后用合适的绝对链接replacegit实例。 您可以使用以下Gist来做同样的事情:

  • 用git-sh-setupreplace/usr/local/Cellar/git/2.0.0/libexec/git-core/git-sh-setup/
  • 用git-stashreplace/usr/local/Cellar/git/2.0.0/libexec/git-core/git-stash/
  • 用git-pullreplace/usr/local/Cellar/git/2.0.0/libexec/git-core/git-pull/

这肯定是一个黑客,但它会让你去。

编辑:确保你在做这个之前看@pilif的答案…

Ubiquill的解决方法适用于git rebase(也可能是其他function不起作用)。 在这种情况下,它需要用下面的*replace第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 

*这条path假设你已经用自制软件安装了git,它位于/usr/local/Cellar/git/2.0.0/里面。

编辑你的git-pull文件,并在其上添加这一行(就在注释块之后)

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

或者只是复制粘贴到您的terminal:

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

更新:根据pilif的推测,自从上一次iTerm2更新(1.0.0.20140629)以来, git-pull在没有此PATH覆盖的情况下正常运行。

有一个更新git-rebase.sh

https://github.com/git/git/pull/110/files

更新:仍然不能与下面提到的发布,我的错误。 Git push works Git pull does not。

在我看来,这个问题已经被苹果用Mac OS X Yosemite 10.10( 14A329r修复了 。 我在通用的Beta Yosemite频道(不是开发者)。 Git推/ 没有任何修改再次按预期工作。