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

4

10 回答 10

100

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

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

这为我解决了这个问题。

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

您可以通过在 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'.

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

更新:这是由 iTerm 对环境做“有趣”的事情引起的。更新到 iTerm 2.0 的官方版本,让这个问题消失。

于 2014-06-05T04:13:20.120 回答
35

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

于 2014-06-04T22:50:28.610 回答
20

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

于 2014-10-20T09:51:01.203 回答
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!

于 2014-06-07T10:15:55.080 回答
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,但我确信有更好的解决方案。

于 2014-06-03T19:48:24.763 回答
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用适当的绝对链接替换实例。您可以使用以下要点来执行相同的操作:

  • git-sh-setup替换/usr/local/Cellar/git/2.0.0/libexec/git-core/git-sh-setup/
  • git-stash替换/usr/local/Cellar/git/2.0.0/libexec/git-core/git-stash/
  • git-pull替换/usr/local/Cellar/git/2.0.0/libexec/git-core/git-pull/

这肯定是一个技巧,但它会让你继续前进。

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

于 2014-06-04T18:03:19.400 回答
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/ 内。

于 2014-06-03T20:07:28.093 回答
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覆盖即可正常运行。

于 2014-06-25T16:13:16.620 回答
1

git-rebase.sh 有更新

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

于 2015-01-29T09:03:20.833 回答
0

更新:仍然无法使用下面提到的版本,我的错误。Git push 有效 Git pull 无效。

在我看来,Apple 已经使用 Mac OS X Yosemite 10.10 ( 14A329r ) 解决了这个问题。我在一般的 Beta Yosemite 频道(不是开发人员)。git推送/无需任何修改即可再次按预期工作。

于 2014-08-25T10:52:27.230 回答