Bueno, ya que el comienzo de la línea de error es env:
, sugiere que git.el está utilizando el programa "env" para encontrar git y llamarlo. En cuanto a la fuente confirma esto, ya que todas las llamadas a Git parece que pasar por aquí:
(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)))
exploración a través del código mostró que en la mayoría de los casos, Emacs llama git directamente con call-process
, pero a veces utiliza el comando "env" , especialmente cuando necesita pasar variables de entorno (como "GIT_INDEX_FILE").
El problema es que Emacs no pasa es exec-path
a env
cuando se ejecuta a través de call-process
, por lo que establecer exec-path
en Emacs no ayudará `env' encontrar git.
En realidad, hay dos soluciones:
encontrar la manera de llegar env
saber dónde está git. Me temo que realmente no puedo ayudarte en esto, ya que no sé cómo configurar ese tipo de cosas en una Mac, pero debería ser una modificación bastante directa de PATH.
Hack git.el para pasar PATH=/path/to/git
a env al llamar a git. Esto es menos limpio, pero no es tan malo como un truco, y especialmente si hiciste la elección del camino en un defcustom
, podría ser útil para otros.
Sugiero comenzar con 1, aunque. Puede cambiar las variables de entorno para Emacs usando:
(setenv "PATH" (concat "/opt/local/bin:" (getenv "PATH")))
Y probando git.el a continuación. Si bien Emacs no pasa la variable exec-path
a procesos secundarios, sí copia a lo largo de su variable de entorno PATH desde cualquier fuente con la que se invocó. Dado que Emacs también llama a git directamente, también deberá configurar exec-path
de la manera en que ya lo hace.
Espero que ayude.
¿Cuál es la salida de 'which git' en la línea de comandos? –
/opt/local/bin/git –