Игнорировать автоматически созданные файлы Emacs в diff

Как мне сделать diff игнорировать временные файлы, такие как foo.c~? Есть ли файл конфигурации, который сделает игнорирование временных файлов по умолчанию?

В целом: каков наилучший способ создания "чистого" патча из тарбола? Я делаю это достаточно редко (отправляя исправление ошибки в проект OSS по электронной почте), чтобы я всегда боролся с этим...

РЕДАКТИРОВАТЬ: ОК, короткий ответ

diff -ruN -x *~ ...

Есть ли лучший ответ? Например, это может пойти в файле конфигурации?

4 ответа

Решение

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

В GNU Emacs

    (defvar user-временный-файл-каталог
      (concat временный-файловый-каталог user-login-name "/"))
    (make-каталог user-временный-файл-каталог t)
    (setq резервное копирование t)
    (setq backup-directory-alist
      `(("." ., пользователь-временный-файловый-каталог)
        (,tramp-file-name-regexp nil)))
    (setq auto-save-list-file-prefix
      (concat user-orary-file-directory ".auto-saves-"))
    (setq auto-save-file-name-transforms
      `((".*", пользователь-временный-файловый-каталог t)))

В XEmacs

    (требуется автосохранение) 
    (требуется 'backup-dir) 

    (defvar user-временный-файл-каталог
      (concat (temp-directory) "/" (user-login-name)))
    (make-каталог user-временный-файл-каталог t)
    (setq резервное копирование t)
    (setq auto-save-directory пользователь-временный-файл-каталог)
    (setq auto-save-list-file-prefix 
         (concat user -orary-file-directory ".auto-saves-"))
    (setq bkup-backup-directory-info
      `((t, пользовательский-временный-файловый-каталог, полный путь)))

Вы также можете удалить их все с помощью простой команды поиска

    находить. имя "*~"

Обратите внимание, что звездочка и тильда заключены в двойные кавычки, чтобы оболочка не расширяла их.

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

Вы можете создать файл игнорирования, например так:

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 (возможно, неофициальный файл), но я больше не мог его найти. Обычно вы продолжаете использовать этот файл игнорирования, просто добавляя новые шаблоны, которые хотите игнорировать.

Постер назвал это "кратким ответом":

diff -ruN -x *~ ...

но подача этого в оболочку приведет к тому, что * будет вызвано перед вызовом diff.

Это лучше:

diff -r -x '*~' dir1 dir2

Я опускаю флаги -u и -N, так как они являются вопросами вкуса и не имеют отношения к рассматриваемому вопросу.

Вы можете создать небольшой sunction/ скрипт для него, например:

#!/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 каталога резервного копирования, чтобы ваши файлы резервных копий всегда оставались в одном месте, вне вашего рабочего каталога!

Другие вопросы по тегам