git pull 上的 OSX 10.10 yosemite beta:git-sh-setup:没有这样的文件或目录

Posted

技术标签:

【中文标题】git pull 上的 OSX 10.10 yosemite beta:git-sh-setup:没有这样的文件或目录【英文标题】:OSX 10.10 yosemite beta on git pull: git-sh-setup: No such file or directory 【发布时间】:2014-07-24 05:26:16 【问题描述】:

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

【问题讨论】:

我也遇到了这个问题,git stash 除外。如果我找到解决方案,我会告诉你 只有 zsh 存在这个问题...从 bash 运行时,git 似乎工作正常。 Zsh 相关? 这是 iTerm2 中带有 zsh 的错误。 iTerm2 在其最新版本 (v1.0.0.20140629) 中修复了它 【参考方案1】:

我认为目前最干净的解决方案是将 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 的官方版本以解决这个问题。

【讨论】:

这应该是正确的答案,惊人的修复。但是,我将命令设置为/usr/bin/login -f $USER,这样我就可以在多个帐户上拥有相同的配置文件:) 显然,bash 删除了所有重复的环境变量。因此,如果您将命令设置为/bin/bash -c /bin/zsh,它将保留其他环境变量,例如$SSH_AUTH_SOCK. 到目前为止,这以最干净的方式为我解决了这个问题。非常感谢! 这修复了 git。但是每当我需要在我的 id_rsa.pub 中使用 ssh 时,都会要求我输入密码。我不必在更改初始命令之前执行此操作,也不必在 Terminal.app 中执行此操作。有什么想法吗? 我认为/bin/bash -c /bin/zsh/usr/bin/login -f &lt;your user name&gt; 更好,因为它保留了字符编码。 /usr/bin/login -f &lt;your user name&gt; 丢失了我的编码,我无法正常显示我的文件。【参考方案2】:

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

【讨论】:

哇,我认为你是对的。我花了几个小时试图让各种 Git 修复工作,结果从 iTerm2 w/zsh 切换到 Yosemite 的默认终端(仍然使用 zsh)效果很好。你是怎么找到这个的? 嗯,这是有史以来最具体的一群人......多么极端的情况。 这是一个非常好的分析。所以一个好的解决方法是将 iTerm 中的初始命令设置为 /usr/bin/login -f . 另一种解决方法是将 iTerm 中的登录 shell 命令设置为 /bin/bash -c /bin/zsh 在 Preferences > Profile > General 部分从 login shell 更改为 command,并按照 @Sorenly 的建议使用 /bin/bash -c /bin/zah,修复了这个问题!【参考方案3】:

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

【讨论】:

如果你想在不证明你是技术人员的情况下解决它......,就这样做吧。感谢马西恩... 正如下面的 cmets 所说,似乎 iTerm 和 zsh 一起阻止了 git pull 的工作。去 iTerm2 修复它。 澄清@MikeHoss,iTerm2 版本 1.0.x 不起作用,但 iTerm2 版本 2.0.x 可以。两者都是 iTerm2,但重要的是版本。【参考方案4】:

另一种解决方案,修改你的 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!

【讨论】:

iTerm2 是问题所在,这是该问题的最佳解决方案之一。赞一个。 即使在公开的 10.10 版本中我也遇到了这个问题,这解决了它。谢谢冯!【参考方案5】:

作为临时解决方案,我将 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,但我确信有更好的解决方案。

【讨论】:

我还必须像 231 一样将其更改为 . /usr/local/Cellar/git/2.0.0/libexec/git-core/git-parse-remote 如果我需要更改它,我将我的设置为指向$GIT_PATH/git-sh-setup等。 我收到/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? 应用此修复程序后,有人知道该怎么做吗? @Andrew 这很难看,但我必须通过 git-sh-setup 并将所有 git 替换为 /usr/local/bin/git。在 git-pull 中也有一些 git 的实例必须被替换【参考方案6】:

如果您需要在官方修复发布之前运行 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 来做同样的事情:

/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 的答案...

【讨论】:

【参考方案7】:

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/ 内。

【讨论】:

【参考方案8】:

编辑你的 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 覆盖的情况下正常运行。

【讨论】:

这似乎是在我的配置中向前迈出一步的唯一解决方案。添加 PATH 行后,当我尝试 PULL 时出现此错误: git: 'credential-osxkeychain' is not a git command。请参阅“git --help”。有什么想法吗?【参考方案9】:

git-rebase.sh 有更新

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

【讨论】:

【参考方案10】:

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

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

【讨论】:

不,我在 14A329r 上遇到重复的环境变量,因此该版本尚未修复。 @Zr40 谢谢。你说的对。不知何故,Git push 现在可以工作了吗?对我来说,但 Git pull 仍然不起作用。

以上是关于git pull 上的 OSX 10.10 yosemite beta:git-sh-setup:没有这样的文件或目录的主要内容,如果未能解决你的问题,请参考以下文章

在 OSX 10.10 Yosemite 上安装 Nokogiri

使用 OSX 10.10 构建 Meteor/React 移动应用程序

osx 10.10 Curl POST 到 HTTPS url 给出 SSLRead() 错误

OSX 10.10 PHP Composer 找不到所需的扩展 intl 和 mcrypt

如何在 OSX 10.10 Yosemite 上安装 xcode 5

OSX 10.10 应用程序没有获得焦点或事件循环