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

时间:2014-06-03 18:41:26

标签: 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命令完全按预期工作

10 个答案:

答案 0 :(得分:100)

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

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

这解决了我的问题。

分析问题的另一个数据点:似乎在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'.

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

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

答案 1 :(得分:35)

我相信这是使用zsh时iTerm中的一个错误。他们刻意不要调用/ usr / bin / login,他们也不会使用execle来清除环境变量。

答案 2 :(得分:20)

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

答案 3 :(得分: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

完成。

享受优胜美地的iTerm2!

答案 4 :(得分: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,但我确信有更好的解决方案。

答案 5 :(得分:3)

如果您需要Git在官方修复程序发布之前工作,那么这是一个临时修复(假设Homebrew和Git 2.0.0)。我设置了两个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"

...然后用适当的绝对链接替换git的实例。您可以使用以下Gists执行相同的操作:

  • 将{strong> /usr/local/Cellar/git/2.0.0/libexec/git-core/git-sh-setup / 替换为git-sh-setup
  • 将{strong> /usr/local/Cellar/git/2.0.0/libexec/git-core/git-stash / 替换为git-stash
  • 将{strong> /usr/local/Cellar/git/2.0.0/libexec/git-core/git-pull / 替换为git-pull

这肯定是一个黑客攻击,但它会帮助你。

编辑:确保在执行此操作之前查看@pilif的答案...

答案 6 :(得分: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

*此路径假设您已经安装了自制的git,它位于/usr/local/Cellar/git/2.0.0 /./。

答案 7 :(得分:1)

编辑您的git-pull文件并在其上添加此行(在注释块之后)

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

或者只是将其粘贴到您的终端:

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

更新:正如pilif所假设的那样,自上次iTerm2更新(1.0.0.20140629)以来git-pull正常运行而没有此PATH覆盖。

答案 8 :(得分:1)

答案 9 :(得分:0)

更新:仍然没有使用下面提到的版本,我的错误。 Git push工作Git pull没有。

在我看来,问题已由Apple与Mac OS X Yosemite 10.10( 14A329r )修复。我是一般的Beta Yosemite频道(不是开发者)。 Git push / pull 再次按预期工作,无需任何修改。