我正在尝试配置git.el. 当我执行git-status时我可以看到状态缓冲区已更改我也可以使用'a'添加文件但是当我尝试使用c写提交日志并使用Cc Cc完成它时提交文件给了我
env: git: No such file or directory
错误和文件未提交.我在OS X上使用emacs 23.我添加到.emacs的唯一自定义是
(setq exec-path (append exec-path '("/opt/local/bin")) )
因为emacs找不到git可执行文件.
在我的.emacs for Mac OS X中,我有以下代码:
(when (equal system-type 'darwin) (setenv "PATH" (concat "/opt/local/bin:/usr/local/bin:" (getenv "PATH"))) (push "/opt/local/bin" exec-path))
似乎问题是,当你运行terminal.app时,它使用你的shell初始化文件来设置所有环境变量,但是当你从Dock启动Emacs时,这些变量就没有设置.
PS顺便说一句 - 还有其他软件包可以与Emacs的Git一起使用 - magit,DVC,egg ......你可以在我的文章中阅读它们
好吧,因为错误行的开头是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直接调用git call-process
,但它有时使用"env"命令,特别是当它需要传递环境变量(如"GIT_INDEX_FILE")时.
问题是,Emacs的没有通过它exec-path
来env
通过在运行它时call-process
,所以设置exec-path
在Emacs不会帮助'ENV"找到饭桶.
有两种解决方案:
弄清楚如何env
知道git在哪里.我担心我不能真正帮助你,因为我不知道如何在Mac上设置那种东西,但它应该是对PATH的一个相当简单的修改.
hait git.el PATH=/path/to/git
在调用git时传递给env.这不是很干净,但它并不是一个糟糕的黑客,特别是如果你选择了路径defcustom
,它可能对其他人有用.
不过,我建议从1开始.您可以使用以下命令更改Emacs的环境变量:
(setenv "PATH" (concat "/opt/local/bin:" (getenv "PATH")))
然后尝试git.el.虽然Emacs不会将变量传递exec-path
给子进程,但它会根据其调用的任何内容复制其PATH环境变量.由于Emacs也直接调用git,你还需要设置exec-path
你已经存在的方式.
希望有所帮助.