2009-05-30 54 views
9

我正在尝试配置git.el.当我做混帐状态我可以看到状态缓冲区更改我也可以使用'a'添加文件,但是当我尝试使用c提交文件时使用c 编写提交日志并使用Cc Cc完成它给我使用git和emacs

env: git: No such file or directory 

错误和文件未提交。我使用emacs 23在OS X上我加入到我的.emacs唯一的定制是

(setq exec-path (append exec-path '("/opt/local/bin"))) 

因为Emacs中未能发现的git可执行文件。

+0

命令行中'哪个git'的输出是什么? – 2009-05-30 20:09:45

+0

/opt/local/bin/git – 2009-05-30 20:44:02

回答

20

在我的.emacs为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时,这些变量不会被设置。

P.S.顺便说一下 - 还有其他的软件包可以与Emacs的Git一起使用 - magit,DVC,egg ...您可以在my article

5

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

实际上有两个解决方案:

  1. 图如何获得env知道哪里Git是。恐怕我无法真正帮你解决这个问题,因为我不知道如何在Mac上设置这种功能,但它应该是对PATH的一个相当直接的修改。

  2. 在调用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

希望有所帮助。

+0

git可执行文件位于我的路径中。我可以在终端输入git,也可以运行env git执行git。但仍然emacs无法找到它。 – 2009-05-31 04:41:23

0

了解他们一个非常简单的方法来解决这个问题是修改你的.emacs的执行路径文件

(add-to-list 'exec-path "/usr/local/git/bin/") 

这是否把戏对我来说。