“git pull” broken

我的未来我决定 提交于 2019-11-27 14:43:07

Looking in the source of git, there's a comment in 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.
 */

If you call git --exec-path, you end up calling const char *git_exec_path(void) in exec_cmd.c. That looks like this:

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);

Now, _argv_exec_path_ is set when you say --exec-path=/some/where so can be discounted. You've stated that the environment variable isn't set. GIT_EXEC_PATH is defined during compilation in the Makefile. Going backwards, it seems to be defined as just libexec/git-core. So, we need to look at what system_path() does instead.

I'm not sure whether RUNTIME_PREFIX is defined for you. But while nosing in the Makefile, I did notice that prefix defaults to $(HOME). I suspect that this may be the cause of your problems.

The simple answer is to put this in ~/.bashrc:

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

If you want to find out more about what's going on, you'll probably have to recompile git using port -d upgrade -f git-core (or similar) and look closely at the build log to see where prefix is being set. Incidentally, port cat git-core shows heavy usage of ${prefix} so it should (hopefully) be obvious.

Interesting. try echo $GIT_EXEC_PATH, which git. It's unlikely to be related to the snow beast…

Bo Morgan

On my system, libexec/git-core is in /usr/local and not /opt/local. The /usr/local/libexec directory had only root accessible permissions for me, and this fixed the problem:

sudo chmod a+rx /usr/local/libexec

Have you tried the steps on the ports Migration wiki page? It was painful, but after doing the --force uninstall and reinstall process, I haven't had any issues with any of my ports, which includes git (with pretty much every variant turned on).

Git compiles so easily there's really not any reason to bother with any of macports' craziness. Get rid of whatever's in /opt and try building it the normal way. Odds are good it will work.

Another option is to download from the helpful page on GitHub:

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

They have a stand-alone installer (though the second option there is MacPorts...)

They used to have a very nice all in one page tutorial that seems to be splintered now. What a shame.

For me, this was an issue only specifically relevant to my brew install. On OSX 10.9.2, I had brew installed under root, so this works for me:

sudo su
export GIT_EXEC_PATH=/Applications/Xcode.app/Contents/Developer/usr/libexec/git-core
brew update # or whatever you want from here
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!