Невозможно открыть ошибку загрузки файла при извлечении файла.emacs.d из системы управления версиями с помощью ELPA.

Я искал ответ на все это, и я не могу понять это. Я установил auctex с помощью package.el (elpa) в GNU Emacs 24.3.1. Я пытаюсь использовать Github для контроля версий, и я храню все свои настройки и настройки в своем .emacs.d/init.el (не используется .emacs совсем). Я пытаюсь синхронизировать все пакеты между несколькими машинами, просто вытягивая .emacs.d каждый раз, когда я еду на новой машине, у меня все работает нормально.

Я передал весь свой.emacs.d используя git add -A а затем фиксации и нажатия (из 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 ответа

Решение

Git автоматически исключает определенные файлы из коммита при использовании git add -Aхотя я не уверен почему. Мне нужно было включить --force вариант (т.е. git add -A --force), а затем он правильно добавил все файлы в хранилище. Оказывается, мне не хватало auctex-autoloads.el это было необходимо.

Кроме того, я затем добавил свой собственный.gitignore с несколькими каталогами, которые я не хотел добавлять в репозиторий, и похоже, что он переопределил любые правила игнорирования, заставляя его исключать файлы автозагрузки и файлы с расширением.elc, Итак, теперь мне нужно только git add -A добавить все файлы в хранилище.

Спасибо всем за внимание!

Другой стратегией, которую вы могли бы рассмотреть, является сохранение ваших файлов инициализации в git и включение метода, который автоматически загружает ваши установленные пакеты из elpa на новую машину, когда это необходимо. Это избавляет от необходимости хранить все содержимое пакета в вашем хранилище, но требует, чтобы у каждой машины был доступ к сайту elpa.

Я храню конфигурацию пакета в отдельной конфигурации и загружаю ее из моего файла инициализации.

Вот метод, который я использую для перезагрузки отсутствующих пакетов:

;; 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)
Другие вопросы по тегам