2009-05-30 61 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/") 

這是否把戲對我來說。