Игнорировать автоматически сгенерированные Emacs файлы в diff
Вопрос
Как мне сделать diff
игнорируйте временные файлы, такие как foo.c~
?Существует ли файл конфигурации, который сделает игнорирование временных параметров по умолчанию?
В более общем плане:каков наилучший способ сгенерировать "чистый" патч из архива?Я делаю это достаточно редко (отправляя исправление ошибки в проект OSS по электронной почте), поэтому у меня всегда возникают проблемы с этим...
Редактировать:Хорошо, короткий ответ таков
diff -ruN -x *~ ...
Есть ли лучший ответ?Например, может ли это быть сохранено в файле конфигурации?
Решение
Это не дает точного ответа на ваш вопрос, но вы можете избежать проблемы, настроив Emacs на использование определенного каталога для хранения файлов резервных копий.Существуют различные реализации для Emacs или XEmacs.
В GNU Emacs
(defvar user-temporary-file-directory (concat temporary-file-directory user-login-name "/")) (make-directory user-temporary-file-directory t) (setq backup-by-copying t) (setq backup-directory-alist `(("." . ,user-temporary-file-directory) (,tramp-file-name-regexp nil))) (setq auto-save-list-file-prefix (concat user-temporary-file-directory ".auto-saves-")) (setq auto-save-file-name-transforms `((".*" ,user-temporary-file-directory t)))
В XEmacs
(require 'auto-save) (require 'backup-dir) (defvar user-temporary-file-directory (concat (temp-directory) "/" (user-login-name))) (make-directory user-temporary-file-directory t) (setq backup-by-copying t) (setq auto-save-directory user-temporary-file-directory) (setq auto-save-list-file-prefix (concat user-temporary-file-directory ".auto-saves-")) (setq bkup-backup-directory-info `((t ,user-temporary-file-directory full-path)))
Вы также можете удалить их все с помощью простой команды find
find . -name “*~” -delete
Обратите внимание, что звездочка и тильда заключены в двойные кавычки, чтобы оболочка не расширяла их.
Кстати, они не являются строго временный Файлы.Они представляют собой резервную копию предыдущей версии файла, поэтому вы можете вручную "отменить" свою последнюю правку в любое время в будущем.
Другие советы
Вы можете создать файл игнорирования, например, следующим образом:
core.*
*~
*.o
*.a
*.so
<more file patterns you want to skip>
а потом беги diff
с -X
вариант, подобный этому:
diff -X ignore-file <other diff options you use/need> path1 path2
Раньше был файл .diffignore, "близкий" к ядру Linux (возможно, неофициальный файл), но я больше не мог его найти.Обычно вы продолжаете использовать этот игнорируемый файл, просто добавляя новые шаблоны, которые хотите игнорировать.
Вы можете создать к нему небольшое дополнение / скрипт, например:
#!/bin/bash
olddir="/tmp/old"
newdir="/tmp/new"
pushd $newdir
for files in $(find . -name \*.c)
do
diff $olddir/$file $newdir/$file
done
popd
Это только один из способов создать такой сценарий.Самый простой способ.Но я думаю, ты уловил идею.
Другое предложение - настроить в emacs каталог резервных копий, чтобы ваши файлы резервных копий всегда размещались в одном и том же месте, за пределами вашего рабочего каталога!
На плакате это указано как "краткий ответ".:
diff -ruN -x *~ ...
но передача этого в оболочку приведет к глобализации * перед вызовом diff.
Так будет лучше:
diff -r -x '*~' dir1 dir2
Я опускаю флаги -u и -N, поскольку это дело вкуса и не имеет отношения к рассматриваемому вопросу.