"git pull"出现故障

14

我最近将我的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 - shakthi
7个回答

24

查看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_就会被设置,因此可以忽略它。你已经说明环境变量没有设置。在Makefile中编译时定义了GIT_EXEC_PATH。往回看,它似乎只被定义为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},因此它应该是显而易见的。


3
对于其他人的澄清:Git命令的路径确实是在编译时设置的(尽管可以通过GIT_EXEC_PATH,然后通过--exec-path进行修改)。这很可能是通过make prefix=/path/to/git ...在编译时设置的。希望任何预先构建的版本都能正确地执行此操作! - Cascabel
感谢您的回答。也许值得注意的是:将export语句添加到~/.profile(在我的Snow Leopard安装中默认存在,而不是.bashrc或.bash_profile)也可以起作用。 - Rob Drimmie
我曾经遇到过同样的问题,但是在我的网络主机上。一般的解决方案似乎是找到你的 /libexec/git-core 所在的位置,然后按照这里所述的设置 GIT_EXEC_PATH 到那个路径。在我的情况下,它在 $HOME/git/src/libexec/git-core 中。 - mindthief
我有两个几乎完全相同的RedHat服务器,都安装了从源代码编译的git 1.7.6。在其中一个服务器上,git pull正常工作,而在另一个服务器上出现了上述错误。已尝试chmod a+rx /usr/local/libexec,并在用户的.bashrc和.bash_profile中尝试了export GIT_EXEC_PATH=/usr/local/libexec/git-core。它对root用户有效,但对用户帐户无效。困惑不解。有什么建议吗?如果有一个神奇的标志可以使用,我甚至愿意重新编译源代码。 - shacker
1
我最终通过使用yum安装git而不是编译来解决了这个问题。很奇怪。 - shacker

2
在我的系统中,libexec/git-core位于/usr/local而不是/opt/local。对我来说,/usr/local/libexec目录仅具有root访问权限,这解决了问题。
sudo chmod a+rx /usr/local/libexec

那个对我也起作用了。我在Mac OS X上安装了(配置,制作,sudo make install),显然它放错了权限。 - danwood

2
有趣。尝试使用echo $GIT_EXEC_PATHwhich git命令。这与雪兽无关。

$GIT_EXEC_PATH未设置,而“which git”的返回值是/opt/local/bin/git,这正是我所期望的。 - Ovid
这很奇怪。我在使用git和snow时没有遇到任何问题,但我没有使用macports的版本。一旦回到家,我会尝试使用macports的git并查看它是否出现异常行为... - Michael Krelin - hacker
即使升级到最新版本。 - Michael Krelin - hacker

1

你尝试过端口迁移维基页面上的步骤吗?虽然有些痛苦,但在执行了--force卸载和重新安装的过程后,我没有遇到任何与我的端口相关的问题,包括git(几乎开启了每个变体)。


几天前我也这样做了,因为我发现我的许多端口都不工作。正如你所提到的,这是很痛苦的。但它并没有解决我的 git 问题 :) - Ovid

0

对我来说,这只是与我的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

0

Git编译非常容易,真的没有必要去烦恼macports的疯狂。清除/opt中的任何内容,尝试以正常方式构建它。很有可能会成功。


0

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

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

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

他们曾经有一个非常好的全面教程页面,但现在似乎已经分裂了。真遗憾。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接