【问题标题】:"git pull" broken“git pull”坏了
【发布时间】:2010-11-30 17:25:38
【问题描述】:

我最近将我的 MacBook Pro 升级到 Snow Leopard 并且“git pull”返回:

rakudo $ git pull
git: 'pull' is not a git-command. See 'git --help'

Did you mean this?
        shell
rakudo $ git-pull
-bash: git-pull: command not found

我尝试通过 macports 重新安装,但无济于事。然后我看到了这个

rakudo $ git --exec-path
/Users/ovid/libexec/git-core

这让我感到惊讶,因为该目录不存在,也从未存在过。谷歌在这里没有帮助。希望你能:)

【问题讨论】:

  • 当我试图从 Xcode 包中破解 git 二进制文件时,我遇到了同样的问题。 ln -s /Applications/Xcode.app/Contents/Developer/usr/bin/git ~/bin/git

标签: git macos osx-snow-leopard


【解决方案1】:

查看git的源码,在git.c中有注释:

/*
 * We use PATH to find git commands, but we prepend some higher
 * precedence paths: the "--exec-path" option, the GIT_EXEC_PATH
 * environment, and the $(gitexecdir) from the Makefile at build
 * time.
 */

如果你调用git --exec-path,你最终会在exec_cmd.c 中调用const char *git_exec_path(void)。看起来像这样:

const char *env;

if (argv_exec_path)
    return argv_exec_path;

env = getenv(EXEC_PATH_ENVIRONMENT);
if (env && *env) {
    return env;
}

return system_path(GIT_EXEC_PATH);

现在,当您说--exec-path=/some/where 时,_argv_exec_path_ 已设置,因此可以打折。您已声明未设置环境变量。 GIT_EXEC_PATH 在编译期间在 Makefile 中定义。向后看,它似乎被定义为libexec/git-core。所以,我们需要看看 system_path() 做了什么。

我不确定是否为您定义了 RUNTIME_PREFIX。但是,在 Makefile 中查找时,我确实注意到 prefix 默认为 $(HOME)。我怀疑这可能是您的问题的原因。

简单的答案是把它放在~/.bashrc:

export GIT_EXEC_PATH=/opt/local/libexec/git-core

如果您想了解更多关于正在发生的事情,您可能必须使用port -d upgrade -f git-core(或类似的)重新编译 git,并仔细查看构建日志以查看设置前缀的位置。顺便说一句,port cat git-core 显示大量使用 ${prefix},所以它应该(希望)是显而易见的。

【讨论】:

  • 只是对发现此问题的其他人进行澄清:git 命令的路径确实是在编译时设置的(尽管它可以由 GIT_EXEC_PATH 修改,然后由 --exec-path 修改)。这很可能是由make prefix=/path/to/git ... 在编译时设置的。希望任何预建版本都能正确地做到这一点!
  • 感谢您的回答。或许值得注意:将 export 语句添加到 ~/.profile(默认情况下存在于我的 Snow Leopard 安装中,.bashrc 和 .bash_profile 都没有)也可以。
  • 我遇到了同样的问题,但在我的虚拟主机上。一般的解决方案似乎是,找到您的 /libexec/git-core 所在的位置,然后将 GIT_EXEC_PATH 设置为该路径,如此处所述。就我而言,它位于 $HOME/git/src/libexec/git-core
  • 我有两台几乎相同的 RedHat 服务器,都使用从源代码编译的 git 1.7.6。一方面, git pull 工作正常,另一方面我得到上面的错误。已尝试 chmod a+rx /usr/local/libexec 并已尝试在用户的 .bashrc 和 .bash_profile 中导出 GIT_EXEC_PATH=/usr/local/libexec/git-core。它确实适用于root,但不适用于用户帐户。莫名其妙。建议?如果有魔法标志可以给它,我什至很乐意重新编译源代码。
  • 我终于能够通过 yum 安装 git 而不是编译来解决这个问题。很奇怪。
【解决方案2】:

有趣。试试echo $GIT_EXEC_PATHwhich git。不太可能和雪兽有关……

【讨论】:

  • $GIT_EXEC_PATH 未设置,“哪个 git”返回 /opt/local/bin/git,正如我所料。
  • 这很奇怪。我对git 和雪没有任何问题,但我不使用macports 的那个。回到家后,我会尝试使用 macports 的 git 看看它是否行为不端......
  • 甚至在升级到最新版本之后。
【解决方案3】:

在我的系统上,libexec/git-core 位于 /usr/local 而不是 /opt/local/usr/local/libexec 目录对我来说只有 root 访问权限,这解决了问题:

sudo chmod a+rx /usr/local/libexec

【讨论】:

  • 那个也对我有用。我在 Mac OS X 上安装了(配置、制作、sudo make install),显然它在那里设置了错误的权限。
【解决方案4】:

您是否尝试过ports Migration wiki page 上的步骤?这很痛苦,但在执行--force 卸载和重新安装过程之后,我的任何端口都没有任何问题,其中包括git(几乎所有变体都打开了)。

【讨论】:

  • 是的,几天前我发现我的很多端口都无法正常工作后才这样做。正如你所说,这很痛苦。它也没有解决我的 git 问题:)
【解决方案5】:

Git 编译如此简单,真的没有任何理由为 macports 的任何疯狂而烦恼。摆脱 /opt 中的任何内容并尝试以正常方式构建它。很有可能它会起作用。

【讨论】:

    【解决方案6】:

    另一种选择是从 GitHub 上的有用页面下载:

    http://help.github.com/mac-git-installation/

    他们有一个独立的安装程序(虽然第二个选项是 MacPorts...)

    他们曾经有一个非常好的一页教程,现在似乎已经分裂了。真可惜。

    【讨论】:

      【解决方案7】:

      对我来说,这是一个仅与我的 brew 安装特别相关的问题。在 OSX 10.9.2 上,我在 root 下安装了 brew,所以这对我有用:

      sudo su
      export GIT_EXEC_PATH=/Applications/Xcode.app/Contents/Developer/usr/libexec/git-core
      brew update # or whatever you want from here
      

      【讨论】:

        猜你喜欢
        • 2016-11-02
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2020-03-25
        • 2021-09-12
        • 2021-11-17
        • 2011-09-06
        • 2017-11-23
        相关资源
        最近更新 更多