OSX 10.10 git pull上的优胜美地testing版:git-sh-setup:没有这样的文件或目录
升级到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命令完全按照预期工作
我认为现在最干净的解决scheme是将iTerm会话中的初始命令更改为
/usr/bin/login -f <your user name>
这为我解决了这个问题。
进一步分析这个问题的数据点:似乎在10.10中,PATH环境variables存在多个副本,子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的正式版本,使这个问题消失。
我相信这是使用zsh时iTerm中的一个错误。 他们故意不调用/ usr / bin / login,并且不使用execle来清除环境variables。
下载最新版本的iTerm2为我解决这个问题!
另一个解决scheme,修改你的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与优胜美地!
作为一个临时解决scheme,我修改了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,但我确定有一个更好的解决scheme。
这是一个临时修复(假设Homebrew和Git 2.0.0),如果你需要Git在正式修复之前工作。 我设置了两个shellvariables:
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"
…然后用合适的绝对链接replacegit
实例。 您可以使用以下Gist来做同样的事情:
- 用git-sh-setupreplace/usr/local/Cellar/git/2.0.0/libexec/git-core/git-sh-setup/
- 用git-stashreplace/usr/local/Cellar/git/2.0.0/libexec/git-core/git-stash/
- 用git-pullreplace/usr/local/Cellar/git/2.0.0/libexec/git-core/git-pull/
这肯定是一个黑客,但它会让你去。
编辑:确保你在做这个之前看@pilif的答案…
Ubiquill的解决方法适用于git rebase(也可能是其他function不起作用)。 在这种情况下,它需要用下面的*replace第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
*这条path假设你已经用自制软件安装了git,它位于/usr/local/Cellar/git/2.0.0/里面。
编辑你的git-pull文件,并在其上添加这一行(就在注释块之后)
PATH="$(dirname $0):$PATH"
或者只是复制粘贴到您的terminal:
ed -s $(which git-pull) <<< $'6i\nPATH="$(dirname $0):$PATH"\n.\nwq'
更新:根据pilif的推测,自从上一次iTerm2更新(1.0.0.20140629)以来, git-pull
在没有此PATH
覆盖的情况下正常运行。
有一个更新git-rebase.sh
更新:仍然不能与下面提到的发布,我的错误。 Git push works Git pull does not。
在我看来,这个问题已经被苹果用Mac OS X Yosemite 10.10( 14A329r ) 修复了 。 我在通用的Beta Yosemite频道(不是开发者)。 Git推/ 拉 没有任何修改再次按预期工作。