Cóż, ponieważ początek linii błędu to env:
, sugeruje, że git.el używa programu "env", aby znaleźć git i wywołać go. Patrząc na źródło potwierdza to od wszystkich wywołań git pojawiają przejść tutaj:
(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)))
Skanowanie za pomocą kodu wykazały, że w większości przypadków, Emacs nazywa git bezpośrednio z call-process
, ale czasami wykorzystuje komendę „env” , szczególnie gdy musi przekazać zmienne środowiskowe (np. "GIT_INDEX_FILE").
Problemem jest to, że Emacs nie przechodzi to exec-path
do env
podczas uruchamiania go poprzez call-process
, więc ustawienie exec-path
w Emacs nie pomoże `env” znaleźć git.
Są naprawdę dwa rozwiązania:
dowiedzieć się, jak dostać env
wiedzieć, gdzie jest git. Obawiam się, że nie mogę ci pomóc w tej sprawie, ponieważ nie wiem, jak skonfigurować takie rzeczy na Macu, ale powinna to być dość prosta modyfikacja PATH.
Hack git.el przekazuje PATH=/path/to/git
do env podczas wywoływania git. Jest to mniej czyste, ale nie jest tak źle z powodu hackowania, a zwłaszcza jeśli wybrałeś ścieżkę do defcustom
, może to być przydatne dla innych.
Proponuję jednak zacząć od 1. Możesz zmienić zmienne środowiskowe dla Emacsa, używając:
(setenv "PATH" (concat "/opt/local/bin:" (getenv "PATH")))
I następnie próbując git.el. Chociaż Emacs nie przekazuje zmiennej procesom potomnym do zmiennej exec-path
, kopiuje ona wraz ze zmienną środowiskową PATH ze wszystkich elementów, z których została wywołana. Ponieważ Emacs również bezpośrednio wywołuje git, musisz także ustawić exec-path
w taki sposób, w jaki już jesteś.
Nadzieję, że pomaga.
Jaki jest wynik polecenia "który git" w wierszu poleceń? –
/opt/local/bin/git –