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 <your user name>
更好,因为它保留了字符编码。 /usr/bin/login -f <your user name>
丢失了我的编码,我无法正常显示我的文件。【参考方案2】:
我相信这是使用 zsh 时 iTerm 中的一个错误。他们故意不调用 /usr/bin/login,也不像应有的那样使用 execle 来清除环境变量。
【讨论】:
哇,我认为你是对的。我花了几个小时试图让各种 Git 修复工作,结果从 iTerm2 w/zsh 切换到 Yosemite 的默认终端(仍然使用 zsh)效果很好。你是怎么找到这个的? 嗯,这是有史以来最具体的一群人......多么极端的情况。 这是一个非常好的分析。所以一个好的解决方法是将 iTerm 中的初始命令设置为 /usr/bin/login -f/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 来做同样的事情:
这肯定是一个技巧,但它会让你继续前进。
编辑:确保在执行此操作之前查看@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