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


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


3
除了之外,我也遇到了这个问题git stash。如果找到解决方案,我会通知您
cadlac

从bash运行时,zsh仅存在此问题... git似乎工作正常。Zsh相关吗?
zeekay 2014年

12
这是使用zsh的iTerm2中的错误。iTerm2固定在其最新版本(v1.0.0.20140629)
RDS

Answers:


100

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

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

这为我解决了这个问题。

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

您可以通过在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的正式版本可以解决此问题。


6
这应该是正确的答案,惊人的解决方法。但是,我将命令设置为/usr/bin/login -f $USER,以便我可以在多个帐户上使用相同的配置文件:)
cadlac

12
显然,bash删除了所有重复的环境变量。因此,如果将命令设置为/bin/bash -c /bin/zsh,它将保留其他环境变量,例如$SSH_AUTH_SOCK
cypheon 2014年

2
到目前为止,这已经为我解决了最干净的问题。非常感谢!
meghaphone

2
这修复了git。但是,每当我需要在id_rsa.pub中使用ssh时,都会要求我输入密码。在更改初始命令之前,也不必在Terminal.app中执行此操作。任何想法?
ZeR0 2014年

5
我认为/bin/bash -c /bin/zsh比更好/usr/bin/login -f <your user name>,因为它保留了字符编码。/usr/bin/login -f <your user name>编码丢失,无法正常显示文件。
Alpha Liu

35

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


1
哇,我认为您是对的。我花了数小时试图使各种Git修复程序正常工作,事实证明,从带ish2的iTerm2 w / zsh切换到Yosemite的默认Terminal(仍与zsh一起)非常有效。您是怎么找到这个的?
jbnunn 2014年

8
好吧,这是有史以来最具体的人群。
提请2014年

2
那是一个很好的分析。因此,一个好的解决方法是将iTerm中的初始命令设置为/ usr / bin / login -f <您的用户名>。
pilif 2014年

13
另一个解决方法是将iTerm中的login shell命令设置为/bin/bash -c /bin/zsh
Vince

1
从改变login shellcommand在首选项>简介>常规部分,并使用/bin/bash -c /bin/zah作为@Sorenly曾建议,修正了这个正确的了!
jlmakes 2014年

20

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


1
如果您想在不证明自己是技术专家的情况下解决问题,请执行此操作。感谢Marthyn ...
Krishnaprasad Varma

如下面的评论所述,似乎是iTerm和zsh一起阻止了git pull的工作。使用iTerm2可以解决此问题。
MikeHoss 2014年

4
为了澄清@ MikeHoss,iTerm2版本1.0.x不起作用,而iTerm2版本2.0.x起作用。两者都是iTerm2,但是版本很重要。
凯文·库珀

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!


iTerm2是问题所在,这是该问题的最佳解决方案之一。荣誉
ocodo 2014年

即使在10.10公开发行版上,我也遇到了这个问题,并且此问题得以解决。谢谢冯!
Ash Furrow,2014年

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,但是我敢肯定有更好的解决方案。


2
我还必须像231一样更改为. /usr/local/Cellar/git/2.0.0/libexec/git-core/git-parse-remote
Keith Smiley 2014年

2
如果我需要改变这一点,我成立了矿点$GIT_PATH/git-sh-setup,等等
TheJF

1
我得到/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?应用此修复程序后,任何人都知道该怎么办?
Drew

@Andrew这是丑陋的,但我不得不经历的git-SH-设置和替换所有git/usr/local/bin/gitgitgit-pull中也有一些实例也必须替换
jbnunn 2014年

3

这是一个临时修复程序(假设Homebrew和Git 2.0.0),如果您需要Git在正式修复程序发布之前工作。我设置了两个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用适当的绝对链接替换的实例。您可以使用以下要点执行相同操作:

  • /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
  • git-pull替换/usr/local/Cellar/git/2.0.0/libexec/git-core/git-pull/

当然,这是一个技巧,但是它将带您前进。

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


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


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覆盖。


这似乎是在我的配置中向前迈进的唯一解决方案。添加PATH行后,当我尝试拉动时出现此错误:git:'credential-osxkeychain'不是git命令。参见'git --help'。有任何想法吗?
kiks73 2014年


0

更新:我的错误仍然不能与下面提到的发行版一起使用。Git push起作用Git pull不起作用。

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


不,我在14A329r上遇到重复的环境变量,因此尚未在该版本上修复。
2014年

@ Zr40 thx。你是对的。Git push现在可以工作了吗?对我来说,但是Git pull仍然无法正常工作。
FrankLämmer2014年
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.