我正在尝试配置git.el。当我执行git-status时,我可以看到带有changed的状态缓冲区,我也可以使用'a‘添加文件,但是当我尝试使用c提交一个文件时,使用C-c编写提交日志并使用C-c完成它会给我提供
env: git: No such file or directory错误,文件未提交。我在OS上使用Emacs23。我添加到我的.emacs中的唯一定制是
(setq exec-path (append exec-path '("/opt/local/bin")) )因为emacs找不到git可执行文件。
发布于 2009-05-31 06:46:01
在Mac的.emacs中,我有以下代码:
(when (equal system-type 'darwin)
(setenv "PATH" (concat "/opt/local/bin:/usr/local/bin:" (getenv "PATH")))
(push "/opt/local/bin" exec-path))问题似乎是,当您运行terminal.app时,它使用您的外壳初始化文件来设置所有环境变量,但是当您从Dock启动Emacs时,这些变量并未设置。
顺便说一句-还有其他的包可以使用来自Emacs的Git - magit,DVC,eg...您可以在my article中阅读有关它们的信息
发布于 2009-05-30 23:30:41
由于错误行的开头是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")时。
问题是Emacs在通过call-process运行它时不会将它的exec-path传递给env,所以在Emacs中设置exec-path不会帮助‘`env’找到git。
实际上有两种解决方案:
env知道git在哪里。我恐怕在这个问题上帮不了你,因为我不知道如何在Mac上设置这样的东西,但它应该是一个相当简单的路径修改。PATH=/path/to/git传递给env。这不是很干净,但它也不是那么糟糕,尤其是如果你选择了进入defcustom的路径,它可能对其他人有用。不过,我建议从1开始。您可以使用以下命令更改Emacs的环境变量:
(setenv "PATH" (concat "/opt/local/bin:" (getenv "PATH")))然后再试试git.el。虽然Emacs不会将变量exec-path传递给子进程,但它会沿着其PATH环境变量从调用时的任何位置进行复制。由于Emacs还直接调用git,因此您还需要以已有的方式设置exec-path。
希望这能有所帮助。
发布于 2012-05-24 04:03:52
解决此问题的一种非常简单的方法是修改.emacs文件中的exec路径
(add-to-list 'exec-path "/usr/local/git/bin/")这对我来说很有用。
https://stackoverflow.com/questions/930439
复制相似问题