Ну, так как начало строки ошибки - env:
, это говорит о том, что git.el использует программу "env", чтобы найти git и вызвать его. Просмотр источника подтверждает это, поскольку все вызовы git, по-видимому, проходят здесь:
(defun git-call-process-env (buffer env &rest args)
"Wrapper for call-process that sets environment strings."
(if env
(apply #'call-process "env" nil buffer nil
(append (git-get-env-strings env) (list "git") args))
(apply #'call-process "git" nil buffer nil args)))
Сканирование по коду показало, что в большинстве случаев Emacs вызывает git напрямую с call-process
, но иногда использует команду env, особенно когда ему нужно передать переменные окружения (например, «GIT_INDEX_FILE»).
Проблема в том, что Emacs не передает exec-path
в env
при запуске через call-process
, поэтому установка exec-path
в Emacs не поможет `env 'найти git.
На самом деле есть два решения:
Выясните, как получить env
, чтобы узнать, где находится git. Боюсь, я не могу вам в этом помочь, поскольку я не знаю, как настроить подобные вещи на Mac, но это должна быть довольно простая модификация PATH.
Взломать git.el для передачи PATH=/path/to/git
в env при вызове git. Это менее чисто, но не так уж плохо от взлома, и особенно если вы сделали выбор пути в defcustom
, это может быть полезно для других.
Я бы предложил начать с 1, хотя. Вы можете изменить переменные окружения для Emacs, используя:
(setenv "PATH" (concat "/opt/local/bin:" (getenv "PATH")))
И тогда попробую git.el. Хотя Emacs не передает переменную exec-path
дочерним процессам, он копирует переменную окружения PATH из того, с чем он был вызван. Поскольку Emacs также вызывает git напрямую, вам также нужно установить exec-path
так, как вы уже делаете.
Надеюсь, это поможет.