使用ELPA从版本控制中提取.emacs.d时无法打开加载文件错误

时间:2013-10-07 18:56:51

标签: git emacs elpa

我已经到处搜索了这个答案,我似乎无法弄明白。我在GNU Emacs 24.3.1中使用auctexpackage.el)安装了elpa。我正在尝试使用Github进行版本控制,并且我将所有自定义和首选项保留在.emacs.d/init.el中(根本不使用.emacs)。我试图让所有软件包在多台机器之间保持同步,只要我去新机器就可以拉.emacs.d并让一切工作正常。

我使用git add -A提交了我的整个.emacs.d,然后提交并推送(来自OS X)。然后我将存储库拉到另一台机器(Windows 7机器)。当我加载时,我得到以下错误

Warning (initialization): An error occurred while loading `c:/Users/user/.emacs.d/init.el':

File error: Cannot open load file, c:/Users/user/.emacs.d/elpa/auctex-11.87.1/auctex-autoloads

我已尝试在init.el

中加入以下内容
(setq package-enable-at-startup nil)
(package-initialize)
(require 'auctex)

但没有任何运气。有谁知道可能导致这个问题的原因?

编辑:我刚刚意识到,当我提交给GitHub时,它并没有添加我期望的所有文件,包括不添加auctex-autoloads.el。我不确定为什么会这样,但我认为这与我如何添加要提交给GitHub的文件有关。任何帮助将不胜感激!

编辑2:我尝试将选项--force添加到git add -a --force,现在一切正常。我还在学习git,所以我认为这是一个简单的错误。我仍然不完全确定为什么它会自动排除某些文件而不是其他文件,但我会试着弄明白。

谢谢!

2 个答案:

答案 0 :(得分:0)

当您使用git add -A时,Git会自动从提交中排除某些文件,但我不确定原因。我需要包含--force选项(即git add -A --force),然后将所有文件正确添加到存储库中。事实证明,我错过了所需的auctex-autoloads.el

此外,我随后添加了我自己的.gitignore,其中包含一些我不想添加到存储库的目录,似乎已经覆盖了忽略规则导致它排除自动加载文件和带扩展名的文件的情况.elc。所以,现在我只需要git add -A将所有文件添加到存储库。

感谢大家的期待!

答案 1 :(得分:0)

您可能考虑的另一个策略是将您的initi文件保存在git中,并包含一个方法,可以在必要时自动从新机器上的elpa下载已安装的软件包。这样就无需将所有包内容保留在您的存储库中,但它确实需要每台计算机都能访问elpa站点。

我将包配置保存在单独的配置中,并加载它 从我的init文件中。

这是我用来重新加载缺少的软件包的方法:

;; emacs package manager.
(require 'package)
(add-to-list 'package-archives
             '("melpa" . "http://melpa.org/packages/")
             '("org" . "http://orgmode.org/elpa/"))
(package-initialize)

;; Create a list of the packages currently installed. You can use the
;; contents of the directory in which they are stored (usually
;; ~/.emacs.d/elpa). Ensure you only use the package name, and not any
;; version information.

;; a good way to get a formatted list of the packages loaded is with the
;; following shell command:
;; ls ~/.emacs.d/elpa | sed -e s/-[0-9.].*//
(defvar cm/packages nil
  "A list of elpa packages that should be available on startup")
(setq cm/packages                                                  
      '(
        auto-complete
        bm
        browse-url-dwim
        bs-ext
        color-moccur
        color-theme-sanityinc-solarized
        csv-mode
        dash
        deferred
        diminish
        dired-hacks-utils
        elisp-slime-nav
        epl
        esh-help
        git-commit-mode
        git-gutter+
        git-rebase-mode
        git-timemachine
        hc-zenburn-theme
        highlight-symbol
        hl-sexp
        ht
        htmlize
        igrep
        js2-mode
        list-utils
        magit
        markdown-mode
        names
        org
        ox-pandoc
        pandoc-mode
        paredit
        popup
        projectile
        request
        request-deferred
        s
        smartparens
        sqlplus
        starter-kit-eshell
        string-utils
        w3m
        windata
        ))

;; cycle through the package list and prompt to install any missing from
;; the list

(defvar missing-pkgs '())

(defun cm-package-refresh ()
  (interactive)
  (setf missing-pkgs nil)
  (dolist (pkg cm/packages)
    (if (not (package-installed-p pkg))
        (progn
          (add-to-list 'missing-pkgs pkg)
          (setq cm-message "Done"))
      (setq cm-message "Nothing missing")))
  ;; for any missing packages, ask to load them all
  (if (and (> (length missing-pkgs) 0)
           (y-or-n-p-with-timeout
            (format "%s %s " "install missing packages:" missing-pkgs) 4 nil))
       (dolist (mpkg missing-pkgs)
        (package-install mpkg)))
  (message "%s" cm-message))

;; now check for missing packages
(if (y-or-n-p-with-timeout "Check packages? " 4 nil)
    (cm-package-refresh))


(provide 'emacs-package)