那么,因为错误行的开头是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