Bene, poiché l'inizio della riga di errore è env:
, suggerisce che git.el sta utilizzando il programma "env" per trovare git e chiamarlo. Guardando il sorgente di conferma dal momento che tutte le chiamate a git sembrano passare attraverso qui:
(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)))
scansione attraverso il codice mostrato che nella maggior parte dei casi, Emacs chiama git direttamente con call-process
, ma a volte usa il comando "env" , in particolare quando deve passare le variabili di ambiente (come "GIT_INDEX_FILE").
Il problema è che Emacs non passa è exec-path
a env
durante l'esecuzione tramite call-process
, così impostando exec-path
in Emacs non aiuterà `env' trovare git.
Ci sono due soluzioni:
capire come raggiungere env
sapere dove git è. Temo di non poterti davvero aiutare su questo, dal momento che non so come impostare quel genere di cose su un Mac, ma dovrebbe essere una modifica piuttosto semplice del PERCORSO.
Hack git.el per passare PATH=/path/to/git
a env quando si chiama git. Questo è meno pulito, ma non è poi così male di un trucco, e specialmente se hai fatto la scelta del percorso in un defcustom
, potrebbe essere utile ad altri.
Vorrei suggerire di iniziare con 1, però. È possibile modificare le variabili di ambiente per Emacs utilizzando:
(setenv "PATH" (concat "/opt/local/bin:" (getenv "PATH")))
E provare git.el quindi. Mentre Emacs non passa la variabile exec-path
ai processi figli, copia lungo la sua variabile d'ambiente PATH da qualunque cosa sia stata invocata. Poiché Emacs chiama direttamente git, dovrai anche impostare exec-path
nel modo in cui lo sei già.
Spero che questo aiuti.
Qual è l'output di "which git" sulla riga di comando? –
/opt/local/bin/git –