Im Quelltext von git findet sich ein Kommentar 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.
*/
Wenn Sie anrufen git --exec-path
rufen Sie am Ende const char *git_exec_path(void)
in exec_cmd.c . Das sieht so aus:
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);
Jetzt wird _argv_exec_path_ gesetzt, wenn Sie sagen --exec-path=/some/where
kann also abgezogen werden. Sie haben angegeben, dass die Umgebungsvariable nicht gesetzt ist. GIT_EXEC_PATH
wird während der Kompilierung in der Datei Makefile . Rückwärts betrachtet, scheint es nur definiert zu sein als libexec/git-core
. Wir müssen uns also ansehen, was system_pfad() stattdessen tut.
Ich bin nicht sicher, ob RUNTIME_PREFIX
ist für Sie definiert. Aber beim Stöbern im Makefile ist mir aufgefallen, dass Präfix wird standardmäßig auf $(HOME)
. Ich vermute, dass dies die Ursache für Ihre Probleme sein könnte.
Die einfache Antwort ist, dies in ~/.bashrc
:
export GIT_EXEC_PATH=/opt/local/libexec/git-core
Wenn Sie mehr darüber herausfinden wollen, was vor sich geht, müssen Sie wahrscheinlich git neu kompilieren, indem Sie port -d upgrade -f git-core
(oder ähnlich) und sehen Sie sich das Erstellungsprotokoll genau an, um zu sehen, wo das Präfix gesetzt wird. Im Übrigen, port cat git-core
zeigt eine starke Nutzung von ${prefix}
Es sollte also (hoffentlich) offensichtlich sein.