2

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

git add -A我使用然后提交和推送(来自 OS X)提交了我的整个 .emacs.d 。然后我将存储库拉到另一台机器(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:我尝试添加选项--forcegit add -a --force现在一切都按预期工作。我还在学习 git,所以我认为这是一个简单的错误。我仍然不完全确定为什么它会自动排除某些文件而不是其他文件,但我会尝试弄清楚这一点。

谢谢!

4

2 回答 2

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)
于 2014-10-30T14:47:02.087 回答
0

当你使用 Git 时,Git 会自动从提交中排除某些文件git add -A,尽管我不知道为什么。我需要包含该--force选项(即git add -A --force),然后它正确地将所有文件添加到存储库中。事实证明,我错过了auctex-autoloads.el所需要的。

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

感谢大家观看!

于 2013-10-08T03:22:13.823 回答