那麼,因爲錯誤行的開頭是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的與call-process
直接調用git的,但有時使用「ENV」命令特別是當它需要傳遞環境變量時(比如「GIT_INDEX_FILE」)。
的問題是,通過call-process
運行它的時候,所以設置在Emacs exec-path
不會幫助'ENV」混帳找到的Emacs沒有通過它的exec-path
到env
。
實際上有兩個解決方案:
圖如何獲得env
知道哪裏Git是。恐怕我無法真正幫你解決這個問題,因爲我不知道如何在Mac上設置這種功能,但它應該是對PATH的一個相當直接的修改。
在調用git時,將git.el傳遞給env以通過PATH=/path/to/git
。這不太乾淨,但並不是那麼糟糕,特別是如果你選擇了路徑進入defcustom
,它可能對其他人有用。
雖然我會建議從1開始。您可以使用以下方法更改Emacs的環境變量:
(setenv "PATH" (concat "/opt/local/bin:" (getenv "PATH")))
然後嘗試git.el。雖然Emacs不會將變量exec-path
傳遞給子進程,但它會從其調用的任何內容沿其PATH環境變量進行復制。由於Emacs也直接調用git,因此您還需要以您已有的方式設置exec-path
。
希望有所幫助。
命令行中'哪個git'的輸出是什麼? – 2009-05-30 20:09:45
/opt/local/bin/git – 2009-05-30 20:44:02