2012-02-26 4 views
4

Что представляет собой хороший способ сделать резервную копию моего файла .emacs каждый раз, когда запускается Emacs? Я хочу сохранить несколько копий, когда мне нужно вернуться к предыдущей версии.Как создать резервную копию .emacs каждый раз, когда запускается Emacs

Моя первая мысль выдать команду оболочки из файла .emacs:

cp ~/.emacs ~/Backups/.emacs-yyyymmdd:hhmmss 

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

Я читал около BackupEachSave и ForceBackups. У кого-нибудь есть опыт с ними? Они хорошо работают?

EDIT:
Ответ Event_jr об управлении версиями является возможным решением. Однако я предпочитаю использовать команду оболочки, поскольку управление версиями применяется ко всем файлам, и мне не нужно несколько резервных копий каждого отдельного файла.

Я посмотрел на переменную управления версиями. Это described в руководстве Emacs:

Emacs также может делать пронумерованные файлы резервных копий. Нумерованные имена файлов резервных копий содержат «. ~», «Номер» и «~» после имени исходного файла. Таким образом, резервные файлы eval.c> будут называться eval.c. ~ 1 ~, eval.c. ~ 2 ~ и т. Д., Все это происходит через имена, такие как eval.c. ~ 259 ~> и далее ,

Контроллер переменной версии определяет, следует ли создавать отдельные файлы резервных копий или несколько резервных файлов с нумерованными номерами.

Итак, я добавил это в мой .emacs:

; Version control and backups: 
(setq version-control t)  

работает как рекламируется.

This section рассказывает, как управлять резервными копиями для каждого файла. Я не изучил его.

+2

Возможно, вы захотите рассмотреть вопрос о сохранении ваших .eamcs под контролем версий. Многие люди это делают. – Tom

+2

«контроль версий применяется ко всем файлам». Контроль версий не применяется ко всем файлам, только к файлам, которые вы явно помещаете под контроль версий. Программное обеспечение контроля версий просто игнорирует те файлы, которые не находятся под его контролем. – Tom

+0

По-видимому, существует разница между «контролем версий» и переменной «version-control». Если задана переменная версии, любой файл, который был изменен, будет иметь нумерованные резервные копии. – user11583

ответ

2

Насколько я знаю, вы не можете выдавать команды оболочки из файла .emacs.

Конечно, вы можете:

(shell-command "cp ~/.emacs ~/.emacs-`date +%Y%m%d:%H%M`") 
0

Вы устанавливаете свойства резервного копирования как конфигурацию; вы можете обратиться here.

6

вопрос вы должны действительно спросить не как я не теряйте пересмотр любого файла I редактирования в Emacs, в том числе ~/.emacs?

Ответ versiond backups. Переменная, которая управляет этой функцией, называется version-control, что является путаницей, поскольку она полностью относится к резервным копиям, а не к VCS.

Это также особенность Emacs; нет дополнительного пакета для установки. Почти все, над чем я работаю, находится в VCS, но я все же считаю чрезвычайно полезным, чтобы все изменения моей работы были легко доступны. Хранение так дешево, так почему бы и нет?

EDIT: описать аспект резервного копирования каждого файла save-buffer.

Вы должны прочитать документацию (C-ч к С-й С-s) из save-buffer понять нюансы, но в основном Попутно С-у С-у заставит его сделать резервную копию после каждого сохранения. Я Actaully переназначить его на свою собственную функцию

(defun le::save-buffer-force-backup (arg) 
    "save buffer, always with a 2 \\[universal-argument]'s 

see `save-buffer' 

With ARG, don't force backup. 
" 
    (interactive "P") 
    (if (consp arg) 
     (save-buffer) 
    (save-buffer 16))) 
(global-set-key [remap save-buffer] 'le::save-buffer-force-backup) 
2

Лучшим решением является использование системы управления версиями, как git. Это будет легче, если вы создаете ~/.emacs.d каталог и положить Elisp файлы туда:

mkdir ~/.emacs.d 
mv .emacs ~/.emacs.d/init.el 
git init 
git add init.el 
git commit -m 'initial checkin' 

Теперь каждый раз, когда вы изменяете файл init.el вы можете использовать следующие, чтобы сохранить изменения:

git commit -a -m 'descriptive commit message here' 

Затем вы можете добавить функцию к after-save-hook, например, что-то вроде этого gist to automatically add, commit, and push when files change. После нажатия у вас есть локальная копия и удаленная копия (например, на github).

Emacs также имеет интеграцию с git через пакет под названием magit.

Вы будете в высшей степени вознаграждены в долгосрочной перспективе, если потратите время, чтобы узнать, как использовать DVCS (Distributed Version Control System), и вы обнаружите, что магита очень удобно использовать git.

+0

Хммммм. Я вижу достоинства, но когда я работаю в таком маленьком масштабе, это звучит как больше проблем, чем того стоит. – user11583

+0

Кажется, сначала это так ... вы удивитесь, как быстро ваш масштаб будет расти, прежде чем вы это осознаете. Время, затрачиваемое на изучение этих инструментов в небольших масштабах, принесет большие дивиденды позже, когда вам придется решать большие проекты. И даже в небольших масштабах вы поймете, насколько это полезно. Я набираю 'git init' для каждого нового проекта, который я запускаю. И если вы используете [magit] (http://philjackson.github.com/magit/), это упрощает выполнение остальных. – aculich

+1

Продвижение, потому что я согласен, однако git (который я также использую) просто не самый удобный для пользователя VCS. Он чрезвычайно мощный и гибкий, но в целом я бы немного насторожился указывать новичков на VCS в его направлении. (Магит * отлично работает и много помогает, но не охватывает все ситуации). Во что бы то ни стало попробуйте git out (с Magit) и посмотрите, нравится ли вам это, но также имейте в виду, что есть более простые альтернативы. – phils

Смежные вопросы