"git pull" сломан

Недавно я обновил свой 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

Это удивило меня, поскольку этот каталог не существует и никогда не существовал. Google не помогает здесь. Надеюсь, вы можете:)

Ответы

Ответ 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, вы вызываете const char *git_exec_path(void) в exec_cmd.c. Это выглядит так:

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

Теперь _argv_exec_path_ устанавливается, когда вы говорите --exec-path=/some/where, поэтому его можно сбрасывать со счетов. Вы указали, что переменная окружения не установлена. GIT_EXEC_PATH определяется во время компиляции в Makefile. Возвращаясь назад, кажется, что он определен как libexec/git-core. Итак, нам нужно посмотреть, что вместо system_path().

Я не уверен, что для вас определен RUNTIME_PREFIX. Но в то время, когда я добавлял в Makefile, я заметил, что prefix по умолчанию - $(HOME). Я подозреваю, что это может быть причиной ваших проблем.

Простой ответ заключается в том, чтобы поместить это в ~/.bashrc:

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

Если вы хотите узнать больше о том, что происходит, вам, вероятно, придется перекомпилировать git с помощью port -d upgrade -f git-core (или аналогичного) и внимательно посмотреть на журнал сборки, чтобы узнать, где установлен префикс. Кстати, port cat git-core показывает интенсивное использование ${prefix}, поэтому он должен (надеюсь) быть очевиден.

Ответ 2

Интересно. попробуйте echo $GIT_EXEC_PATH, which git. Это вряд ли связано с снежным зверем...

Ответ 3

В моей системе libexec/git-core находится в /usr/local, а не /opt/local. Для каталога /usr/local/libexec для меня были доступны только права доступа root, и это устранило проблему:

sudo chmod a+rx /usr/local/libexec

Ответ 4

Вы пробовали шаги на странице port wiki wiki? Это было болезненно, но после выполнения процесса удаления и переустановки --force у меня не было проблем с каким-либо из моих портов, который включает в себя git (при этом почти каждый вариант включен).

Ответ 5

Git легко компилируется, поэтому нет никакой причины беспокоиться о безумстве макспорта. Избавьтесь от того, что в /opt и попытайтесь построить его обычным способом. Скорее всего, это сработает.

Ответ 6

Другой вариант - загрузить с полезной страницы GitHub:

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

У них есть автономный установщик (хотя второй вариант есть MacPorts...)

У них был очень хороший все в одном уроке, который теперь разбивается. Какой позор.

Ответ 7

Для меня это была проблема, которая была особенно актуальна для моей установки brew. В OSX 10.9.2 у меня был brew установлен под root, поэтому это работает для меня:

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